2009-06-09 55 views

回答

6

我怀疑有什么办法,你可以做没有引擎盖下的环路(作为BitArray可以任意长,不像BitVector32),但如果你只是不”不想把它写自己:

var hasAnyTrue = input.Cast<bool>().Contains(true); 
var hasAnyFalse = input.Cast<bool>().Contains(false); 
1

我不知道你是否可以使用BitArray,但如果你使用int,long等,然后检查它是否大于0(为true)或小于最大值数据类型(用于false)会执行此操作。

所以是这样的:

bool IsTrue (int bitArray) 
{ 
    return bitArray != 0; 
} 


bool isFalse (int bitArray) 
{ 
    return bitArray != int.MinValue; 
} 
+0

事实上,这将是我的建议过于假设它投影确定。 – Ian 2009-06-09 11:20:12

+3

BitArray是一种类型。它不是`int`。 – 2009-06-09 11:28:07

+0

是的,但像你说的是不是真的有检查值,而不做一个循环的方式。我只是提供了一种检查位数组的方式,不一定使用BitArray类型。 – kemiller2002 2009-06-09 11:33:14

1

索引到BitArray和检验各boolean值是一个显而易见的解决方案。如果你关心性能,你应该首先考虑创建自己的抽象,但如果你喜欢使用BitArray对于大部分的操作,那么你可以做使用CopyTo到合适的尺寸(Count >> 5)的int[]的检查,然后根据需要对这些ints执行零或非零检查。

2

如果您正在使用System.Collections中从该BitArray类,你可以使用下面的代码,以确定是否有任何是真实的。

C#版本

var anyTrue = myArray.Cast<bool>().Any(x => x); 

VB.Net版本

Dim anyTrue = myArray.Cast(Of Boolean)().Any(Function(x) x) 
相关问题