以下代码中的 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 表达式创建的委托(delegate)将为
excludeItems
中的每个元素调用一次。 (在
foreach
循环的每次迭代中)和
ob
将具有该元素的值,直到找到等于
item
的值(或用完元素)。
我是一名优秀的程序员,十分优秀!