2011-08-31 51 views
3

我想創建一個測試,如果任何對象在列表中的某個屬性爲真,結果將是真實的。是否有簡明的方法來確定列表中的任何對象是否爲真?

通常我會做的方式是:

foreach (Object o in List) 
{ 
    if (o.property) 
    { 
     myBool = true; 
     break; 
    } 
    myBool = false; 
} 

所以我的問題是:有沒有做同樣的任務,以更加簡潔的方式嗎?

if (property of any obj in List) 
    myBool = true; 
else 
    myBool = false; 

回答

0

是,使用LINQ

http://msdn.microsoft.com/en-us/vcsharp/aa336747

return list.Any(m => m.ID == 12); 

編輯:也許類似下面的東西改變代碼,使用Any,縮短了代碼

+2

是使用LINQ,但不要使用'Count()> 0',因爲您需要處理整個列表以獲取計數,然後進行評估。一旦找到第一個匹配項,使用'Any()'來短路。此外,而不是做'如果(條件)返回true;否則返回false;',只是做'返回條件';' –

+0

感謝您的提示 – Rumplin

3

這裏的答案是Linq的任何方法...

// Returns true if any of the items in the collection have a 'property' which is true... 
myBool = myList.Any(o => o.property); 

傳遞給任何方法的參數是一個謂語。 Linq將針對集合中的每個項目運行該謂詞,如果其中任何項目通過,則返回true。

請注意,在此特定示例中,謂詞僅適用於「屬性」被假定爲布爾值(這在您的問題中已隱含)​​。是另一種類型的「財產」,謂詞在測試時必須更加明確。

// Returns true if any of the items in the collection have "anotherProperty" which isn't null... 
myList.Any(o => o.anotherProperty != null); 

你不一定必須使用lambda表達式寫的謂語,你可以在方法封裝測試...

// Predicate which returns true if o.property is true AND o.anotherProperty is not null... 
static bool ObjectIsValid(Foo o) 
{ 
    if (o.property) 
    { 
     return o.anotherProperty != null; 
    } 

    return false; 
} 

myBool = myList.Any(ObjectIsValid); 

您也可以重複使用,在其他謂詞LINQ的方法...

// Loop over only the objects in the list where the predicate passed... 
foreach (Foo o in myList.Where(ObjectIsValid)) 
{ 
    // do something with o... 
} 
0
myBool = List.FirstOrDefault(o => o.property) != null; 

我試圖用你做同樣的變量。

相關問題