2011-10-27 44 views
2

我使用C#Asp.net 4和Linq。替代包含泛型的方法

我有一個BOOL類型的泛型。 我需要檢查至少泛型中的一個元素是否爲TRUE。 目前我正在使用Contains方法(全部工作正常)。

List<bool> userIsValid = new List<bool>(); 
userIsValid.Add(false); 
userIsValid.Add(true); 
userIsValid.Add(false); 
if (userIsValid.Contains(true)) 
// do smt here 

我想知道是否存在另一種方法,而不使用Contains方法。

非常感謝!

+2

'Contains'方法有什麼問題?它適用於這個樣本 – JaredPar

+0

爲什麼你不使用'Contains',當它確實做到了你想要的? – Polynomial

+0

有替代品,但爲什麼?他們不會比這更簡潔。 –

回答

4

您可以使用Any():

if(userIsValid.Any(b => b)) { ... } 

,因爲它擊中由拉姆達指定條件爲真這將返回true儘快。在這種情況下,由於列表中的值是布爾值,因此只需檢查值即可。更詳細的書寫方式是.Any(b => b == true),但這是不必要的。

+0

真是有趣的做法! – GibboK

1

可以做到這一點:

if (userIsValid.Aggregate((x,y) => x || y)) { ... } 

我不會這樣做,因爲它不是非常明確的代碼,而且它實際上比其他選項慢,因爲一旦它找到true就不會返回。

但是,如果您只是尋找深奧的解決方案...

+0

感謝您的評論 – GibboK