For-each循环变量

时间:2011-05-10 20:05:57

标签: c# for-loop

以下代码中的ob含义是什么?与项目相同吗?

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

2 个答案:

答案 0 :(得分:8)

oblambda 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

中的项目