For-each循环变量

RSh*_*har 1 c# for-loop

ob在以下代码中的含义是什么 - 与item相同?

foreach (var item in allItems)
{
    if (excludeItems.Exists(ob => ob.Equals(item)))
    {
        Console.WriteLine("Item {0} excluded",item);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

oblambda表达式的参数.所以如果你熟悉匿名方法,那就像:

foreach (var item in allItems)
{
    if (excludeItems.Exists(delegate (string ob) { return ob.Equals(item); })
    {
        Console.WriteLine("Item {0} excluded",item);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是假设ob应该是string- 它可能不是.excludeItems由于通用类型推断,这将取决于.

Lambda表达式可以更明确,因此可以写成:

if (excludeItems.Exists((string ob) => { return ob.Equals(item); })
Run Code Online (Sandbox Code Playgroud)

要么

if (excludeItems.Exists((string ob) => ob.Equals(item))
Run Code Online (Sandbox Code Playgroud)

基本上,lambda表达式中有几个小的快捷方式,用于可以推断出类型的单个参数的常见情况,以及来自单个表达式的返回值.

现在在这种特殊情况下,从lambda表达式创建的委托将为每个元素调用一次excludeItems(在循环的每次迭代中foreach),并且ob将具有该元素的值,直到它找到一个等于item(或用完的值)为止的值.元件).