我有一个扩展类Func<T, TResult>
,其签名如下所示:
public static ITryAndReturnValue<TResult> Try<T, TResult>(this Func<T, TResult> func, T arg, int retries)
我可以通过将方法转换为Func<T, TResult>
来实现它,就像这样......
Func<string, string> func = request.DownloadString;
string response = func.Try(urlA, 3);
但我真正想做的是:
string response = request.DownloadString.Try(urlA, 3);
但是我得到了这个编译时错误。
CS0119&#39; WebClient.DownloadString(string)&#39;是一种方法,在给定的上下文中无效
我能做些什么来让我的扩展方法像我想要的那样工作吗?
答案 0 :(得分:2)
不,您无法在方法组或匿名函数上调用扩展方法。
C#规范的第7.6.5.2节要求:
从 expr 到M j 的第一个参数的类型存在隐式标识,引用或装箱转换。
(其中 expr 是您尝试调用扩展方法的表达式,M j 是扩展方法本身。)
方法组转换(允许您编写Func<string, string> func = request.DownloadString;
的转换)不身份,参考或装箱转换。这是一种单独的转换(规范的第6.6节)。
答案 1 :(得分:1)
我能做些什么来让我的扩展方法像我想要的那样工作吗?
没有
扩展方法明确设计为不在方法组上工作。