MethodThatReturnsListofString

MethodThatReturnsListofString

我一直试图弄清楚这一点,这确实使我烦恼。我有一些看起来像这样的代码

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/

10-10 10:58