你不需要if(boolThing[0]==true)
。你可以使用`if(boolThing [0]))
你也可以使用二元运算符一起评估几个布尔值。
if((bools[0]&bools[3]) && !(bools[1]|bools[2]|bools[4]|bools[5])
可以使用BitArray
轻松地与布尔的采集工作,这将是更有效的。
最有效的方法将是使用数字类型。
最简单的方法是使用枚举和标志。您可以使用二元运算符来设置或清除枚举的标志。
[Flags]
public enum MyBoolFlag
{
None,
Bool0 = 1<<0,
Bool1 = 1 << 1,
Bool2 = 1 << 2,
Bool3 = 1 << 3,
Bool4 = 1 << 4,
Bool5 = 1 << 5,
//etc
}
而你使用二进制操作来设置标志。
MyBoolFlag myFlag = MyBoolFlag.Bool0|MyBoolFlag.Bool1|MyBoolFlag.Bool3;
在您的代码,您现在可以检查:
if(myFlag == MyBoolFlag.Bool0|MyBoolFlag.Bool3)
{
}
您可以定义常量各种条件。
const MyBoolFlag myCondition1 = MyBoolFlag.Bool0|MyBoolFlag.Bool3;
再检查:
if(myFlag == myCondition1)
{
}
你也可以做一些更多的跑腿和使用类型,如原生类型,字节和直接诠释。
您可以使用一个字节来保存8个布尔值作为标志掩码,每个掩码表示2的幂。 uint32可以保存32,而uint64可以保存64个布尔值。
这有巨大的性能提升,因为布尔值被存储为uint32,这意味着它使用4个字节的数据,并且当您使用位请求布尔标志时,您可以在uint32中打包32个布尔值。
程序也将执行得更快,因为CPU在使用本地机器字的单个操作中评估myFlag == myCondition1。否则,需要很多指令来将查找布尔值置于数组中并进行比较。 。Net也会做一些健全的检查,确保你的数组不是空的,你的索引不超出范围,然后需要移动指针来查找这些值。
为了方便起见,您可以从布尔值数组中创建一个bitarray,然后使用它来设置适当的标志位来初始化一个数值类型的数组。
例如:
bool[] bools = new bool[] { true, false, false, true, false, false };
BitArray bitArray = new BitArray(new bool[] { true, false, false, true, false, false });
int[] array = new int[1];
bitArray.CopyTo(array, 0);
int value = array[0];
的这点是 '价值' 将是9,如果布尔变量[0] =真及的bool [3]真。
所以,你的代码将干净是:
if(value==9) // bools[0]&bools[1]==true;
您还可以创建不断口罩检查不同的数值,以检查是否不同位在数值设定或使用二进制运算操作的位。
通过使用二元运算设置数值,可以获得更高的效率。
uint32 myFlag= 1|(1<<3);
'boolThing [0] == true'只能是'boolThing [0]'。 '== true'是多余的。 – Guy