如何确定 lambda 函数中的参数
本文关键字:参数 函数 何确定 lambda | 更新日期: 2023-09-27 18:35:34
在下面的例子中,特别是在函数的第二个语句中,传递到 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 匹配委托中定义的条件。要素 当前列表单独传递给谓词委托, 并且符合条件的元素保存在返回的 列表。
因此,n
是numbers
的一个元素。
你从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
变量相同。