[英]Enhance C# Enum in order to use Bitwise operation?
二元運算非常有用。 這樣我能做到| ^ &
| ^ &
為了發出一個新的序列。
但是,有時Enum
沒有附加以base 2
的值(或根本沒有值)。
IE:
我想Enhance || derive|| attach
Enhance || derive|| attach
Enhance || derive|| attach
值附加到枚舉(如果可能)到每個條目。
所以我將能夠做到:
if (MyListItemType== Header |Footer ) ...
可能嗎? 還是有任何棘手的解決方法?
我想增強|| 推導|| 將值附加到枚舉(如果可能)到每個條目。
你不能那樣做(除非重新定義枚舉)。 但是當它在你不擁有的代碼中時,它就結束了。 可能已經存在依賴編號的代碼,更改 int 值會破壞該代碼。
但這通常意味着 Enum 不是一個位集,所以嘗試將它用作一個可能不是一個好主意。
這是代碼創建者的設計決策。
查看您的示例列表:
var item = ListItemType.Header | ListItemType.Footer | ListItemType.SelectedItem;
item
真的可以同時是 header、頁腳和選定項目嗎? 這是互斥選項的列表。
你想使用標志枚舉:
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
class MyClass
{
Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}
不,你不能。
如果Enum
沒有用FlagsEnumeration
標記和/或具有正確的位掩碼值(如您所說 - “沒有 base2”),則不能對其使用按位運算來獲得有意義的結果。
正如其他人所說,它無法完成,但我將使用擴展方法使用快捷方式:
public enum MyEnum
{
This,
That,
TheOther
}
public static class MyEnumeExtensions
{
public static bool IsAny(this MyEnum enumValue, params MyEnum[] values)
{
return values.Any((e) => e == enumValue);
}
}
所以我可以使用:
myEnum.IsAny(This, That);
這幾乎就是您想要實現的目標。
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
http://msdn.microsoft.com/en-us/library/cc138362.aspx
然后您可以對它們使用按位運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.