2011-10-27 42 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