ob在以下代码中意味着什么-与item相同吗?
foreach (var item in allItems)
{
if (excludeItems.Exists(ob => ob.Equals(item)))
{
Console.WriteLine("Item {0} excluded",item);
}
}
最佳答案
ob
是lambda expression的参数。因此,如果您熟悉匿名方法,则就像:
foreach (var item in allItems)
{
if (excludeItems.Exists(delegate (string ob) { return ob.Equals(item); })
{
Console.WriteLine("Item {0} excluded",item);
}
}
假设
ob
的类型应为string
-可能不是。由于泛型类型推断,这将取决于excludeItems
。Lambda表达式可以更明确,因此可以写成:
if (excludeItems.Exists((string ob) => { return ob.Equals(item); })
要么
if (excludeItems.Exists((string ob) => ob.Equals(item))
基本上,在lambda表达式中,对于可以推导其类型的单个参数以及从单个表达式返回值的常见情况,有一些小捷径。
现在,在这种特殊情况下,将从lambda表达式创建的委托对
excludeItems
中的每个元素(在foreach
循环的每次迭代中)调用一次,并且ob
将具有该元素的值,直到找到等于item
的值(或元素用完)。关于c# - 每个循环变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5955808/