有我色彩選擇enum
代表紅,藍,綠,無。枚舉位運算返回錯誤值
[Flags]
public enum SelectedColor
{
None, Red, Blue, Green
}
當我創建一個新的枚舉並將其設置爲Red
和Green
然後檢查是否Blue
設置,返回true
。 Blue
從來沒有設置任何地方。
例如:
SelectedColor selectedColor = SelectedColor.Red;
selectedColor |= SelectedColor.Green; //Add Green to Selection
//Check if blue is set
Debug.Log("Blue Selected hasFlag? : " + hasFlag(selectedColor, SelectedColor.Blue));
//Check if blue is set
Debug.Log("Blue Selected isSet? : " + isSet(selectedColor, SelectedColor.Blue));
輸出:
藍中選出的hasFlag? :False
Blue Selected isSet? :真
hasFlag和isSet功能:
bool hasFlag(SelectedColor source, SelectedColor value)
{
int s1 = (int)source;
return Convert.ToBoolean((s1 & Convert.ToInt32(((int)value) == s1)));
}
bool isSet(SelectedColor source, SelectedColor critValue)
{
//return ((source & critValue) == critValue);
return ((source & critValue) != 0);
}
正如你看到的,我的isSet
函數返回錯誤值。我已經嘗試了return ((source & critValue) == critValue)
和return ((source & critValue) != 0);
,但他們都失敗了。這應該根據我對SO和this後的研究。
我hasFlag
功能是好的,但爲什麼是isSet
函數返回錯誤的值?
請注意,我使用.NET 3.5,所以我不能使用.NET 4枚舉幫助函數,如HasFlag
。
+1。值得指出的是,如果顯式值沒有被定義,則從0,1,2,3,4等順序排列。其次,Flags屬性不會影響默認情況下創建值的方式。它確實會影響'ToString'的行爲,並且還會向IDE發信號通知枚舉是否打算用作標誌。 – vcsjones
@vcsjones好點,我會補充說。 –
我試過這個enum btiwise操作並放棄了。現在,我回來才發現我必須爲枚舉提供值。那麼,在4之後,下一個是8? – Programmer