2014-03-24 89 views

回答

27

你可以使用Enumerable.Any它會發現滿足條件的第一場比賽。正如Habib正確地說過使用Any作爲Enumerable.All會返回true爲空的bool列表。

!lst.Any(c=> c == true); 

或使用Enumerable.All

lst.All(c=> c == false); 
+3

+1,最好使用'Any',因爲'Enumerable.All'會爲空的bool列表返回true。 – Habib

+0

+1這比All()更好,因爲它總是迭代整個列表;當它找到一個時,它會停止 –

+1

@AdrianCarneiro Uhm ..?這對我來說沒有意義。在這種情況下,兩者都很懶惰,需要查看相同數量的元素。 – user2864740

2

您可以使用LINQ'sAll方法:

這將返回false立即如果它發現等於true的值。

4

我使用IEnumerable.Any/All同意。但是,我不同意當前選票最多的答案(在撰寫本文時這是錯誤的)以及Any vs All的一些相關評論。

這些以下操作是等效語義上。請注意,這些否定應用於這兩個內部,謂詞以及操作結果。

!l.Any(x => f(x)) 
l.All(x => !f(x)) 

現在,在這種情況下,我們因此尋找:

如果任何真實價值的情況。

!l.Any(x => x) // f(x) = x == true 

或者

這是真實的情況。

l.All(x => !x) // f'(x) = !f(x) = !(x == true) 

沒有什麼特別的空名單的結果是一樣的:例如!empty.Any(..)是錯誤的,因爲empty.All(..)和上述等價關係仍然有效。

另外,兩個兩種形式都被懶惰地評估,並且需要在中進行相同數量的評估;在內部,對於序列實現而言,差異僅僅是否定對謂詞和結果值的檢查。

相關問題