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

时间:2013-10-15 18:18:29

标签: c# parameters lambda

在下面的例子中,特别是在函数的第二个语句中,什么是传递给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);
}

3 个答案:

答案 0 :(得分:5)

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

  

Predicate是一个方法的委托,如果对象传递给它,则返回true   匹配委托中定义的条件。的元素   当前列表分别传递给Predicate委托,   并且匹配条件的元素将保存在返回的内容中   列表。

因此nnumbers的元素。

答案 1 :(得分:0)

您可以从FindAll

的签名中获得
public List<T> FindAll(
    Predicate<T> match
)

其中Predicate<T>

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

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

答案 2 :(得分:0)

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变量相同。