1

如果我有一个ArrayList 包含boolean值,找出这个 Bool 值序列结果的最佳方法是什么?

我正在尝试这样的事情

bool result = false;    
bool flag = false;
ArrayList flags = new ArrayList();

if (something > 5)
{
 flag = true;
}
flags.Add(flag);    

foreach (bool val in flags)
{
      result &= val;
}

但是,如果我将结果变量声明为 true 而不是 false,那么这会改变结果。我有点困惑。

任何意见,将不胜感激!

4

4 回答 4

4

如果您使用 &= 则“结果”的初始值非常重要。如果结果开始为假,无论您执行多少次 &=,结果都将保持为假。如果结果以 true 开头,则 &= 将按照您的预期运行

于 2013-01-23T10:36:03.893 回答
1

ArrayListto更改List<bool>并尝试使用递归。你不需要额外的 bool 变量。

  public bool BoolVal(List<bool> list, int n)
    {
        if (n == 0)//The condition that limites the method for calling itself
            return list[n];
        return list[n] & BoolVal(list, n - 1);
    }

称之为

var result = BoolVal(flags, flags.Count -1)
于 2013-01-23T10:54:06.167 回答
0

首先,您应该使用强类型 exList<bool>而不是ArrayList.

然后使用扩展All方法检查是否全部 iftrue

List<bool> flags = new List<bool>();
...
bool restul = flags.All(flag => flag);

或者:

bool restul = !flags.Any(flag => flag);
于 2013-01-23T10:40:50.970 回答
0
flags.ToArray().Where(item => (bool)item == true).SingleOrDefault() != null

如果您可以使用 LINQ,那么这对我有用,那么我建议您将默认结果设置为 false 并在您找到 true 时退出循环(在将结果设置为 true 之后):

foreach (bool val in flags)
{
      if(val)
      {
          result = true;
          break;
      }

}

ArrayList 中唯一的东西是布尔值吗?

这里的其他建议也很好,但再次使用 LINQ。

于 2013-01-23T10:42:57.593 回答