Implicit conversion of a method to Func<T, Tresult>
本文关键字:lt gt Tresult Func of conversion method to Implicit | 更新日期: 2023-09-27 17:58:53
我有一个扩展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"WebClient.DownloadString(string)"是一个方法,在给定的上下文中无效
我能做些什么让我的扩展方法像我希望的那样工作吗?
不,不能在方法组或匿名函数上调用扩展方法。
C#规范第7.6.5.2节要求:
存在从expr到Mj的第一个参数类型的隐式身份、引用或装箱转换。
(其中expr是您试图调用其扩展方法的表达式,Mj是扩展方法本身。)
方法组转换(允许您编写Func<string, string> func = request.DownloadString;
的转换)是而不是身份、引用或装箱转换。这是一种单独的转换(规范的第6.6节)。
我能做些什么让我的扩展方法像我希望的那样工作吗?
没有。
扩展方法被明确设计为而不是在方法组上工作。