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

C# 列舉類型 完整指南:型別安全、可讀性與位元旗標運算

     編輯:關於C#

基本宣告與用法


using System;

class Test
{
    // 指定底層型別為 byte,節省記憶體
    enum Color : byte { Red = 6, Green = 8, Blue = 10 }

    static string StringFromColor(Color color) => color.ToString();

    static void Main()
    {
        Color c = Color.Red;
        Console.WriteLine(c);           // Red
        Console.WriteLine(StringFromColor(c)); // Red
        Console.WriteLine((int)c);      // 6
    }
}

核心特性

  • 型別安全:Color c = 5; 編譯錯誤,需強制轉型 (Color)5。
  • 底層整數型別:可指定 byte, sbyte, short, ushort, int, uint, long, ulong,預設 int。
  • 隱含值遞增:未指定值時從 0 開始,每項 +1。
  • ToString():輸出常數名稱("Red"),非數值。
  • Flags 屬性:標記為位元旗標,支援位元運算組合。

Flags 列舉:位元旗標完整範例


[Flags]
enum FileAccess : byte
{
    None = 0,
    Read = 1,      // 0001
    Write = 2,     // 0010
    Execute = 4,   // 0100
    ReadWrite = Read | Write, // 0011 = 3
    All = Read | Write | Execute // 0111 = 7
}

var access = FileAccess.Read | FileAccess.Write; // 組合
bool canRead = (access & FileAccess.Read) != 0;  // 檢查
access &= ~FileAccess.Write; // 移除 Write
Console.WriteLine(access); // Read (Flags 屬性讓 ToString 輸出 "Read, Write")

常用靜態方法

方法用途範例
Enum.IsDefined檢查值是否定義於列舉Enum.IsDefined(typeof(Color), 6) → true
Enum.GetNames取得所有常數名稱陣列Enum.GetNames(typeof(Color)) → ["Red","Green","Blue"]
Enum.GetValues取得所有常數值陣列Enum.GetValues(typeof(Color)) → [6,8,10]
Enum.Parse字串轉列舉值(大小寫敏感)Enum.Parse(typeof(Color), "Red") → Color.Red
Enum.TryParse安全轉換,不拋出異常Enum.TryParse("Green", out Color c)

最佳實踐建議

  1. 預設用 int,大量實例或記憶體敏感才指定 byte/short。
  2. 互斥選項用一般列舉;可組合選項加 [Flags] 並設 2 的冪次值。
  3. 避免負數值(除非特殊互通需求),位元運算易出錯。
  4. 公開 API 的列舉加上 [Flags] 並文件化組合語意。
  5. C# 11+ Enum.GetValues<T>() 型別安全泛型版本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved