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