【问题标题】:How can I find the result of a Bool ArrayList comparing its Bool values?如何找到 Bool ArrayList 比较其 Bool 值的结果?
【发布时间】:2013-01-06 19:17:52
【问题描述】:

如果我有一个 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,那么这会改变结果。我有点困惑。

任何建议将不胜感激!

【问题讨论】:

  • 嗯...你实际上想做什么?当然,如果您更改代码,结果会发生变化,但您希望结果是什么?
  • 最好把ArrayList替换成List
  • myArrayList.Cast<bool>().All(x=>x) 会告诉您序列中的所有布尔值是否为真。你为什么用ArrayList而不是List<bool>
  • 我试图找出使用 & 运算符的这个 Bool 序列的结果是真还是假:例如,如果我的 ArrayList 中有 (false,false,true),那么结果是 False!
  • 好的,我会使用 List 我会告诉你

标签: c# arraylist boolean boolean-logic


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    ArrayList 更改为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)
    

    【讨论】:

      【解决方案3】:

      首先,您应该使用强类型,例如 List&lt;bool&gt;,而不是 ArrayList

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

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

      或者:

      bool restul = !flags.Any(flag => flag);
      

      【讨论】:

      • 谢谢,我从上述建议中找到了类似的解决方案,不幸的是,我没有足够的声誉将您的答案标记为正确:p
      【解决方案4】:
      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。

      【讨论】:

        猜你喜欢
        • 2018-06-12
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多