你不需要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