2010-10-09 34 views
6

如何檢查包含值爲false的數組true_or_false檢查數組是否包含false?

bool[] true_or_false = new bool[10]; 

for (int i = 0; i < txtbox_and_message.Length; i++) 
{ 
    bool bStatus = true; 
    if (txtbox_and_message[i] == "") 
    { 
    bStatus = false; 
    } 
    true_or_false[i] = bStatus;       
} 
+0

什麼是循環?看起來它會檢查空白文本(重複)並將* all *元素設置爲true或false,如果字符串爲空? – PaulG 2010-10-09 22:33:39

+1

「bStatus」不應該依賴於「我」嗎?這就是PaulG爲什麼說所有的元素都是一樣的原因。 – 2010-10-09 22:37:00

+0

[C#方法中的返回布爾值]的可能重複(http://stackoverflow.com/questions/3852078/returning-booleans-in-a-c-method) – 2010-10-09 22:38:15

回答

15

如果不是全真,那麼至少有一個是假的。

因此:

!true_or_false.All(x => x) 

的Docu:http://msdn.microsoft.com/en-us/library/bb548541.aspx

編輯:.NET 2.0的版本,要求:

!Array.TrueForAll(true_or_false, delegate (bool x) { return x; }) 

Array.Exists(true_or_false, delegate (bool x) { return !x; }) 

注:我一直stayi從設置true_or_false無意義的代碼納克了,但它可能是你想要的是:

int emptyBox = Array.FindIndex(txtbox_and_message, string.IsNullOrEmpty); 

,這將給你-1,如果所有的字符串都是非空的,或失敗的字符串,否則指數。

+0

是否適用.net框架2.0? – 2010-10-09 22:50:15

+0

不,該謂詞的擴展方法語法和lambda表示法都需要C#3,但存在.NET 2版本(請參閱編輯)。 – 2010-10-09 23:01:16

2

的這一翻譯代碼:

bool containsEmptyText = txtbox_and_message.Contains(t => t.Text ==String.Empty) 
11
return true_or_false.Any(p => !p); 
+0

是否適用.net framework 2.0? – 2010-10-09 22:51:21

+0

不幸的是,它需要3.0 + – Homam 2010-10-09 22:54:30

+3

@krunal:如果你有平臺限制,你應該把它們放在問題中。 – 2010-10-09 23:43:18

8
using System.Linq; 

則:

true_or_false.Contains(false); 
+0

添加System.Linq後出現此錯誤。類型或命名空間名稱'Linq'在名稱空間'System'中不存在(您是否缺少程序集引用?) – 2010-10-09 22:34:32

+0

@krunal:您使用的是什麼版本的.NET框架? – BoltClock 2010-10-09 22:34:53

+0

您需要在您的項目中添加一個引用到system.core dll – Nobody 2010-10-09 22:38:26

2

有幾個解決方案:

解決方案1: 後做一個for循環for循環來檢查true_or_false包含假像這樣:

如果你想實現這一點沒有花哨的技巧,以及您希望將自己的代碼,你可以做這個節目:

bool containsFalse = false; 
for(int j = 0; j < true_or_false.Length; j++) 
{ 
    //if the current element the array is equals to false, then containsFalse is true, 
    //then exit for loop 
    if(true_or_false[j] == false){ 
     containsFalse = true; 
     break; 
    } 
} 

if(containsFalse) { 
    //your true_or_false array contains a false then. 
} 

解決方案2:

!true_or_false.All(x => x); 

PK

+4

'== false'和'== true'需要死掉。否則一個很好的答案+1。 – 2010-10-09 23:42:42

+3

如果您使用了'true_or_false.Any(x =>!x)' – mgbowen 2010-10-09 23:54:54

+0

@nasufara,那麼您的第二種解決方案會表現更好:您基於什麼證據爲此聲明? 「Any」和「All」都是短路。如果有的話,只需要調用'!'(布爾NOT)運算符一次就可以使'All'更快,但差別幾乎可以肯定是太小而無法衡量。 – 2010-10-10 00:37:06

1

如果.NET3。5+你可以使用System.Linq,然後檢查使用Any

// if it contains any false element it will return true 
true_or_false.Any(x => !x); // !false == true 

如果你不能使用LINQ的,那麼你有其他的,選項:

使用Array.Exists靜態方法:(本·提到)

Array.Exists(true_or_false, x => !x); 

使用List.Exists(你將不得不數組轉換到一個列表訪問此方法)

true_or_falseList.Exists(x => !x); 

或者您將需要遍歷數組。

foreach (bool b in true_or_false) 
{ 
    if (!b) return true; // if b is false return true (it contains a 'false' element) 
} 
return false; // didn't find a 'false' element 

相關


和優化代碼:

bool[] true_or_false = new bool[10]; 

for (int i = 0; i < txtbox_and_message.Length; i++) 
{ 
    true_or_false[i] = !String.IsNullOrEmpty(txtbox_and_message[i]); 
} 
+0

爲什麼你要到達'List.Exists'而不是'Array.Exists'? – 2010-10-09 23:03:38

相關問題