泛型中包含方法的替代方法

时间:2011-10-27 15:36:54

标签: c# linq generics

我使用C#Asp.net 4和Linq。

我有BOOL类型的泛型。 我需要检查Generics中至少有一个元素是否为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方法的方法。

非常感谢!

3 个答案:

答案 0 :(得分:4)

您可以使用Any():

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

一旦达到lambda指定的真实条件,它就会返回true。在这种情况下,因为列表中的值是布尔值,它只需要检查值。写一个更冗长的方式是.Any(b => b == true),但这是不必要的。

答案 1 :(得分:1)

这些可行:

Exists()

  userIsValid.Exists(true);

Any()

userIsValid.Any(x => x);

答案 2 :(得分:1)

可以这样做:

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

我不会这样做,因为它不是非常清晰的代码,它实际上比其他选项慢,因为一旦找到真的它就不会返回。

但如果你只是在寻找深奥的解决方案......