首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 列舉進階:自訂底層型別、位元旗標與位運算技巧

     編輯:關於C語言

指定底層型別

列舉可指定任何整數型別 (除 `char`) 作為底層:


enum MyEnum : byte { AA, BB, CC, DD } // 節省記憶體

// 取得名稱與值
string[] names = Enum.GetNames(typeof(MyEnum)); // AA, BB, CC, DD
byte[] values = (byte[])Enum.GetValues(typeof(MyEnum)); // 0, 1, 2, 3

位元旗標列舉

使用 2 的冪次數值 + `[Flags]` 屬性,支援組合:


[Flags]
enum MyEnum
{
    AA = 0x0,  // 0
    BB = 0x1,  // 1
    CC = 0x2,  // 2
    DD = 0x4,  // 4
    EE = 0x8,  // 8
    FF = 0x10, // 16
    GG = 0x20, // 32
    HH = 0x40  // 64
}

// 組合與測試
MyEnum flags = MyEnum.CC | MyEnum.DD; // 6
bool hasCC = flags.HasFlag(MyEnum.CC); // true (C# 4+)
bool hasDD = (flags & MyEnum.DD) != 0; // 相容舊版寫法

常見位元操作

操作程式碼說明
設定旗標`flags |= MyEnum.EE`加入 EE
清除旗標`flags &= ~MyEnum.EE`移除 EE
切換旗標`flags ^= MyEnum.EE`有則移除、無則加入
檢查旗標`flags.HasFlag(MyEnum.EE)`建議用法

ToString 行為


MyEnum e = MyEnum.CC | MyEnum.DD;
Console.WriteLine(e);        // "CC, DD" (有 Flags)
Console.WriteLine((int)e);   // 6

無 `[Flags]` 時,組合值若非單一定義會顯示數值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved