簡體   English   中英

增強 C# Enum 以便使用位運算?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM