以下代码中的ob含义是什么?与项目相同吗?
foreach (var item in allItems)
{
if (excludeItems.Exists(ob => ob.Equals(item)))
{
Console.WriteLine("Item {0} excluded",item);
}
}
答案 0 :(得分:8)
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
的值(或用完元素)。
答案 1 :(得分:1)
ob表示excludeItems
中的项目