2013-01-23 35 views
1

如果我有一個ArrayList值包括boolean值,找出這個Bool值序列的結果的最佳方法是什麼?如何找到Bool ArrayList比較其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; 
} 

但是如果我將宣佈結果變量作爲真正的而不是虛假的,那麼這個變化的結果。我有點困惑。

任何意見將不勝感激!

+1

嗯...你*** ***實際上試圖做?當然,如果你改變你的代碼,結果會改變,但你期望結果是什麼? – spender

+0

將ArrayList替換爲List gabba

+1

'myArrayList.Cast ().All(x => x)'會告訴你序列中的所有布爾值是否爲真。你爲什麼使用'ArrayList'而不是'List '? – spender

回答

4

如果您使用的是& =那麼「result」的初始值非常重要。如果結果開始爲假,但是很多次你做& =結果將保持爲假。如果結果開始爲true,那麼& =將按照您的預期運行

0

首先,您應該使用強類型,例如List<bool>而不是ArrayList

然後使用延長All方法來檢查是否所有,如果true

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

或者:

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

謝謝你,我從上面的建議中發現了類似於我的問題的解決方案,不幸的是我沒有足夠的信譽來標記你的答案是正確的:p – michaalis

0
flags.ToArray().Where(item => (bool)item == true).SingleOrDefault() != null 

這個工作對我來說,如果你可以使用LINQ如果沒有,那麼我會建議你默認的結果爲false,當你找到真正的時候(在將結果設置爲true之後)退出循環:

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

} 

也是bools ArrayList中唯一的東西?? ??

這裏的其他建議也不錯,但是再次使用LINQ。

1

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