我有一個枚舉,假設它被稱爲體育:枚舉擴展方法來清除就地
enum Sports
{
Baseball = 1,
Basketball = 2,
Football = 4,
Hockey = 8,
Soccer = 16,
Tennis = 32,
etc...
}
我基本上會想補充一點清除面具有點像這樣的擴展方法:
Sports Mask = Sports.Baseball | Sports.Football | Sports.Tennis; //37
Mask.Clear(Sports.Baseball);
// Mask = Football | Tennis
這是我提出的擴展方法,它不起作用。清除不會影響Mask,值仍然爲37.我不確定我是否可以在擴展方法內修改此部分。有沒有其他的方法來完成這個?
public static void Clear<T>(this Enum value, T remove)
{
Type type = value.GetType();
object result;
if (type.Equals(typeof(ulong)))
{
result = Convert.ToUInt64(value) & ~Convert.ToUInt64((object)remove);
}
else
{
result = Convert.ToInt64(value) & ~Convert.ToInt64((object)remove);
}
value = (Enum)Enum.Parse(type, result.ToString());
}
作爲請注意,如果您打算通過字符串表示形式顯示枚舉,那麼這是一個很好的選擇a將'[flags]'屬性添加到枚舉定義中。爲了一個很好的解釋檢查這個答案:http://stackoverflow.com/questions/8447/enum-flags-attribute/8480#8480 –
謝謝。我在我的真實代碼中有[Flags]標籤,但我一起快速入侵它,然後當我運行我的示例時,我喜歡「爲什麼它不顯示實際值,而不是37」,那麼我就像「哦」 「我忘了[標誌]。 – Mark