初始化Func <T1,T2>作为扩展方法

Ari*_*iac 6 c# lambda extension-methods

是否可以使Func委托一个扩展方法?例如,就像你可以创建函数一样

bool isSet(this string x) {return x.Length > 0;}
Run Code Online (Sandbox Code Playgroud)

我希望能够写出类似的东西

Func<string, bool> isSet = (this x => x.Length > 0);
Run Code Online (Sandbox Code Playgroud)

当然,上述内容在语法上并不正确.有什么事吗?如果没有,那是语法或编译的限制吗?

Phi*_*ier 14

简答:不,那是不可能的.

扩展方法是语法糖,只能在某些情况下定义(静态类中的静态方法).lambda函数没有与之相当的东西.


Jon*_*eet 7

是否可以使Func委托一个扩展方法?

否.扩展方法必须在顶级(非嵌套)非泛型静态类中声明为常规静态方法.

看起来你会尝试仅为方法的范围创建一个扩展方法 - 在C#中没有类似的概念.

  • 是的,我比Jon Skeet快:).但是,无论如何你得到了upvotes ...... :( (2认同)