繁体   English   中英

如何确定lambda函数中的参数?

[英]How is the parameter in a lambda function determined?

在下面的示例中,特别是在函数的第二条语句中,传递给lambda函数的'n'参数是什么。 通过代码的上下文,我假设它指向数字列表。 但是我如何确定地知道这一点,而不必从代码的上下文中猜测。

//simple example of lambda expression.
public static void SimpleLambdExpression()
{
    List<int> numbers = new List<int>{1,2,3,4,5,6,7};
    var evens = numbers.FindAll(n => n % 2 == 0);
    var evens2 = numbers.FindAll((int n) => { return n % 2 == 0; });
    ObjectDumper.Write(evens);
    ObjectDumper.Write(evens2);
}

从文档http://msdn.microsoft.com/en-us/library/fh1w7y8z.aspx

谓词是方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回true。 当前List的元素将分别传递给Predicate委托,并且与条件匹配的元素将保存在返回的List中。

因此, nnumbers的元素。

您可以从FindAll的签名中得到:

public List<T> FindAll(
    Predicate<T> match
)

Predicate<T>在哪里

public delegate bool Predicate<in T>(
    T obj
)

因此, FindAll接受一个带有T输入的函数(在本例中为int )并返回bool FindAll的文档告诉您列表中的每个项目都传递给该函数。

可以用这种方式编写FindAll扩展方法(如果它可以帮助您理解):

IEnumerable<int> FindAll(IEnumerable<int> source, Predicate<int> predicate)
{
    List<int> result = new List<int>();
    foreach (int item in source)
    {
        if (predicate(item))
        {
            result.Add(item);
        }
    }

    return result;
}

因此,lambda表达式中的n变量与此方法中的item变量相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM