2011-05-10 228 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表示排除項目中的項目