假設我有以下幾點:確定是否有任何標誌設置超過一定值
[Flags]
public enum Options : long
{
None = 0,
Flag1 = 0x00000001,
Flag2 = 0x00000002,
Flag3 = 0x00000004,
Flag4 = 0x00000008,
Flag5 = 0x00000010,
// ...
FlagV = 0x10000000000,
FlagW = 0x20000000000,
FlagX = 0x40000000000,
FlagY = 0x80000000000,
FlagZ = 0x100000000000
}
目前,以確定是否設置一個標誌,我這樣做:
(myOptions & (long)Options.Flag1) == (long)Options.Flag1
怎麼辦我確定是否設置了高於FlagV的ANY標誌(例如FlagW,FlagX等)並檢索其值(例如,如果設置了FlagW,FlagX和FlagZ,我想檢索FlagW的值)?換句話說,有沒有這樣一個另類:
if ((myOptions & (long)Options.FlagW) == (long)Options.FlagW)
return (long)Options.FlagW;
else if ((myOptions & (long)Options.FlagX) == (long)Options.FlagX)
return (long)Options.FlagX;
else if ((myOptions & (long)Options.FlagY) == (long)Options.FlagY)
return (long)Options.FlagY;
// etc.
要檢查*標誌的任何*設置,使用'myOptions = 0'!爲了檢索它的值,只需將它與標誌本身進行按位與('&')即可。 – 2014-08-31 18:08:42
對不起。編輯我的問題更清晰。基本上,我試圖確定是否設置了FlagV上的任何一個標誌,如果有的話,該標誌是什麼。 – arao6 2014-08-31 18:15:49
@ arao6您的最後一段代碼與'return myOptions;'等價。 – 2014-08-31 18:18:37