1

ArrayList インクルード値がある場合boolean、この一連のブール値の結果を見つけるための最良の方法は何ですか?

私はこのようなことを試みていました

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;
}

ただし、結果変数をfalseではなくtrueとして宣言すると、結果が変わります。私は少し混乱しています。

アドバイスをいただければ幸いです。

4

4 に答える 4

4

&= を使用している場合、「結果」の初期値は非常に重要です。結果が false で始まる場合、&= を何度実行しても、結果は false のままになります。結果が true で始まる場合、 &= は期待どおりに動作します

于 2013-01-23T10:36:03.893 に答える
1

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)
于 2013-01-23T10:54:06.167 に答える
0

まず、List<bool>の代わりに強力な型 ex を使用する必要がありArrayListます。

次に、拡張Allメソッドを使用して、すべての場合を確認しますtrue

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 に答える