我一直试图弄清楚这一点,这确实使我烦恼。我有一些看起来像这样的代码
static T MyFunction<T>(Func<T> action, int i, int i2)
{
...some code here
}
当我需要调用此代码时,我尝试了
var result = MyFunction<List<string>>(MethodThatReturnsListofString(int number), 1,2)
它未能说明最佳重载具有无效参数
但是当我尝试以下
var result = MyFunction<List<string>>(() => MethodThatReturnsListofString(int number), 1,2)
工作正常。在这种情况下,“()=>”的功能是什么。我认为()不能与需要超过0个args的方法一起使用。
最佳答案
MyFunction<T>
将不带任何参数并返回类型T
的方法作为第一个参数。
在第一次尝试中,您调用MethodThatReturnsListofString(number)
并尝试提供结果(List<T>
)作为参数而不是方法。
第二次尝试,通过键入() => MethodThatReturnsListofString(number)
创建具有所需签名的方法,并将其作为参数提供。
为了更清楚一点,您可以创建一个类似
static List<T> MyAnonymousMethod()
{
return MethodThatReturnsListofString(number);
}
然后叫
MyFunction<List<string>>(MyAnonymousMethod, 1, 2);
使用
() => MethodThatReturnsListofString
可以声明一个内联匿名方法,因此您无需先创建MyAnonymousMethod
。您的代码的这一部分就是所谓的lambda表达式。请注意,通过声明此lambda,不会立即执行
MethodThatReturnsListofString
!仅当MyFunction
真正调用该动作参数(如static T MyFunction<T>(Func<T> action, int i, int i2)
{
// ... some code
var result = action();
// ... more code
}
关于c# - Lambda C#中“()=>”的目的是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35487288/