C# 将方法隐式转换为Func<;T、 Tresult>;

C# 将方法隐式转换为Func<;T、 Tresult>;,c#,delegates,extension-methods,C#,Delegates,Extension Methods,我有一个扩展类,它扩展了Func,其签名如下: public static ITryAndReturnValue<TResult> Try<T, TResult>(this Func<T, TResult> func, T arg, int retries) 但是我得到了这个编译时错误 CS0119“WebClient.DownloadString(string)”是一个在给定上下文中无效的方法 我能做些什么来让我的扩展方法像我希望的那样工作吗 我能做些什么

我有一个扩展类,它扩展了
Func
,其签名如下:

public static ITryAndReturnValue<TResult> Try<T, TResult>(this Func<T, TResult> func, T arg, int retries)
但是我得到了这个编译时错误

CS0119“WebClient.DownloadString(string)”是一个在给定上下文中无效的方法

我能做些什么来让我的扩展方法像我希望的那样工作吗

我能做些什么来让我的扩展方法像我希望的那样工作吗

没有


扩展方法被明确设计为不在方法组上工作。

不,不能在方法组或匿名函数上调用扩展方法

C#规范第7.6.5.2节要求:

存在从expr到Mj第一个参数类型的隐式标识、引用或装箱转换

(其中expr是试图调用扩展方法的表达式,Mj是扩展方法本身。)


方法组转换(允许您编写
Func=request.DownloadString;
)的转换不是标识、引用或装箱转换。这是一种单独的转换(规范的第6.6节)。

常规静态方法调用语法对我来说适用于给出的示例-可能是因为C#6更好?感谢您的快速回复!)我不明白你说的“常规”方式行不通是什么意思。你能详细解释一下吗?糟糕透了。我希望我有更好的一面。@yozepi:Eric的意思是你可以试着把它叫做
string response=ExtensionContainingClass.try(request.DownloadString,urlA,3)-但他预测它不会起作用。我想可能是的,这取决于你使用的是哪个版本的VS,以及潜在的
请求的类型。哦,我完全没有注意到
T
可以从那里推断出来。是的,这应该行得通。我将删除错误的段落。
Func<string, string> func  = request.DownloadString;
string response = func.Try(urlA, 3);
string response = request.DownloadString.Try(urlA, 3);