在C#和Vb.net中,没有任何方法可以循环迭代一个bitarray来检查contins的任何真值或假值(Dotnet 2.0)?
答案 0 :(得分:7)
我怀疑你有没有办法在没有循环的情况下做到这一点(因为BitArray
可以任意长,不像BitVector32
),但如果你只是不想写它自己:
var hasAnyTrue = input.Cast<bool>().Contains(true);
var hasAnyFalse = input.Cast<bool>().Contains(false);
答案 1 :(得分: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)
答案 2 :(得分:1)
我不知道你是否可以使用BitArray来做,但如果你使用int,long等然后检查它是否大于0(对于true)或小于最大值可以做到的数据类型(表示错误)。
这样的事情:
bool IsTrue (int bitArray)
{
return bitArray != 0;
}
bool isFalse (int bitArray)
{
return bitArray != int.MinValue;
}
答案 3 :(得分:1)
索引到BitArray
并检查各个boolean
值是一个明显的解决方案。如果您担心性能问题,首先应考虑创建自己的抽象,但如果您希望在大多数操作中使用BitArray
,则可以使用CopyTo
进行检查int[]
1}}正确的大小(Count >> 5
),然后根据需要对这些整数执行零或非零检查。