簡體   English   中英

C# 我們如何擴展枚舉標志的 scope?

[英]C# How can we expand the scope of enum flags?

我正在使用 Enum Flags 來指示狀態值。

但我發現這有一個 int 范圍

所以會出現以下錯誤。

我想添加枚舉狀態值,我該怎么辦?

在此處輸入圖像描述

[Flags]枚舉中唯一值的最大數量為 65(64 + 0 值)。
您將需要一個 64 位 ulong 基礎類型才能使其工作。

默認 Enum 基於 Int32,因此您只能擁有 33 個唯一的[Flags]值。

[Flags]
public enum eStatus : ulong
{
    Normal = 0,
    Status0001 = 1 << 0,
    Status0002 = 1 << 1,
    Status0003 = 1 << 2,
    Status0004 = 1 << 3,
    Status0005 = 1 << 4,
    // ...
    Status0030 = 1 << 29,
    Status0031 = 1 << 30,
    
    Status0032 = (ulong) 1 << 31,
    Status0033 = (ulong) 1 << 32,
    // ...
    Status0063 = (ulong) 1 << 62,
    Status0064 = (ulong) 1 << 63,
}

您的最后一個枚舉值不能包含在 enum: int使用的默認 integer 表示中。

您可以檢查: 0x80000000 > int.MaxValue返回true

因此,您必須將枚舉存儲在更大的 integer 表示中: long

像這樣:

[Flags]
public enum eStatus : long
{
    Status001 = 0x000000001,
    Status002 = 0x000000002,
    Status003 = 0x000000004,
    Status004 = 0x000000008,
    Status005 = 0x000000010,
    [...]
    Status1111 = 0x40000000,
    Status1112 = 0x80000000,
}

Status1111是一個奇怪的名稱,因為您不會為eStatus枚舉定義超過 64 個不同的可能值,因為long以 2 為底只有 64 個數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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