2011-05-10 331 views
1

ob在以下代码中的含义是什么 - 是否与item相同?For-each循环变量

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

回答

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表达式中的几个小快捷方式的一个共同的情况下,可以推断出其类型的单个参数以及来自单个表达式的返回值。

现在,在这个特定的情况下,从λ表达式创建的代表将被一次为每个元件在excludeItems称为(在foreach循环的每次迭代)和ob将具有该元素的值,直到它找到一个值等于item(或用完了元素)。

+0

Jon Skeet再次摇摆。 – Bastardo 2011-05-10 20:11:06

+0

感谢这是非常有帮助和详细。我会阅读关于lambda表达式。 – RShar 2011-05-10 20:13:46

1

ob表示排除项目中的项目