是否可以使Func委托扩展方法? 例如,就像你可以创建函数
一样bool isSet(this string x) {return x.Length > 0;}
我希望能够写出类似
的内容Func<string, bool> isSet = (this x => x.Length > 0);
当然,上述内容在语法上并不正确。有什么事吗?如果没有,这是语法或编译的限制吗?
答案 0 :(得分:14)
简短回答:不,那是不可能的。
扩展方法是语法糖,只能在某些情况下定义(静态类中的静态方法)。这与lambda函数没有相同之处。
答案 1 :(得分:7)
是否可以让Func委托扩展方法?
没有。扩展方法必须在顶级(非嵌套)非泛型静态类中声明为普通静态方法。
看起来你会尝试仅为方法的范围创建扩展方法 - 在C#中没有类似的概念。
答案 2 :(得分:4)
要回答关于为什么需要这个问题的评论中的问题,你可以正常定义isSet函数,并将其用作方法调用,它将与扩展方法具有相同的效果但语法不同。
使用中的语法差异纯粹是您将字符串作为参数传递,而不是将其作为该字符串上的方法调用。
一个工作示例:
public void Method()
{
Func<string, bool> isSet = (x => x.Length > 0);
List<string> testlist = new List<string>() {"", "fasfas", "","asdalsdkjasdl", "asdasd"};
foreach (string val in testlist)
{
string text = String.Format("Value is {0}, Is Longer than 0 length: {1}", val, isSet(val));
Console.WriteLine(text);
}
}
此方法定义了上面的isSet(但没有此语法)。然后它定义一个测试值列表并迭代它们生成一些输出,其中一部分只是调用isSet(val)
。 Func
可以像这样非常愉快地使用,并且应该做你想要的事情。