C# 对于每个循环变量

C# 对于每个循环变量,c#,for-loop,C#,For Loop,ob在以下代码中的含义是什么?这与项目相同吗 foreach (var item in allItems) { if (excludeItems.Exists(ob => ob.Equals(item))) { Console.WriteLine("Item {0} excluded",item); } } ob是的参数。因此,如果您熟悉匿名方法,则如下所示: foreach (var item in allItems) { if (exc

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

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

ob
是的参数。因此,如果您熟悉匿名方法,则如下所示:

foreach (var item in allItems)
{
    if (excludeItems.Exists(delegate (string ob) { return ob.Equals(item); })
    {
        Console.WriteLine("Item {0} excluded",item);
    }
}
这是假设
ob
的类型应该是
string
——很可能不是。由于泛型类型推断,这将取决于排除项的类型

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

if (excludeItems.Exists((string ob) => { return ob.Equals(item); })

基本上,lambda表达式中有几个小快捷键,用于可以推断其类型的单个参数和单个表达式的返回值的常见情况


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

ob
是的参数。因此,如果您熟悉匿名方法,则如下所示:

foreach (var item in allItems)
{
    if (excludeItems.Exists(delegate (string ob) { return ob.Equals(item); })
    {
        Console.WriteLine("Item {0} excluded",item);
    }
}
这是假设
ob
的类型应该是
string
——很可能不是。由于泛型类型推断,这将取决于排除项的类型

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

if (excludeItems.Exists((string ob) => { return ob.Equals(item); })

基本上,lambda表达式中有几个小快捷键,用于可以推断其类型的单个参数和单个表达式的返回值的常见情况


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

ob表示排除项目中的项目

ob表示排除项目中的项目

谢谢,这非常有帮助并且详细。我将阅读有关lambda表达式的内容。谢谢。这是非常有用和详细的。我将阅读有关lambda表达式的内容。