2010-10-09 250 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