C# 枚舉類型:你的友好指南

你好啊,未來的編程超新星!今天,我們將要一起深入探索C#中枚舉(enums)的奇妙世界。如果你之前從未聽說過它們,不用擔心 - 通過這個教學,你將會成為枚舉的專家!那麼,讓我們一起開始這個令人興奮的旅程吧。

C# - Enums

枚舉是什麼?

想像一下你正在創建一個遊戲,玩家可以選擇不同的角色職業。你可能會有戰士、法師、箭手和治疗師。你會如何在你的代碼中表示這些選項?這就是枚舉出場的時候!

枚舉(enum,全稱為enumeration)是C#中的一種特殊類型,它允許你定義一組命名的常量。這就像創建一種具有固定可能值的自定義類型。酷不酷?

為什麼使用枚舉?

  1. 它們使你的代碼更具可讀性。
  2. 它們通過限制選項為預定義的集合來幫助防止錯誤。
  3. 它們非常適合表示類別或選項。

声明枚舉

讓我們從基礎開始。以下是如何声明枚舉:

enum CharacterClass
{
Warrior,
Mage,
Archer,
Healer
}

在這個例子中,我們創建了一個名為CharacterClass的枚舉,它有四個可能的值。默認情況下,C#會從0開始為每個枚舉成員分配整數值。

在代碼中使用枚舉

現在,我們已經声明了我們的枚舉,讓我們看看如何在代碼中使用它:

class Program
{
static void Main(string[] args)
{
CharacterClass myClass = CharacterClass.Warrior;
Console.WriteLine($"我的角色職業是: {myClass}");
}
}

當你運行這段代碼時,它將輸出:

我的角色職業是: Warrior

這不是很棒嗎?我們剛剛創建了一個類型為CharacterClass的變量,並將其值設為Warrior。這就像給你的角色發了一個身份證!

枚舉值和轉換

記得我提到過枚舉被分配了整數值嗎?讓我們進一步探討一下:

Console.WriteLine($"戰士值: {(int)CharacterClass.Warrior}");
Console.WriteLine($"法師值: {(int)CharacterClass.Mage}");
Console.WriteLine($"箭手值: {(int)CharacterClass.Archer}");
Console.WriteLine($"治疗師值: {(int)CharacterClass.Healer}");

這將輸出:

戰士值: 0
法師值: 1
箭手值: 2
治疗師值: 3

我們在這裡使用了轉換(那個(int)部分就是轉換),將我們的枚舉值轉換為整數。這就像在幕後看C#是如何組織我們的枚舉!

自定義枚舉值

但等一下,還有更多!如果你想要為你的枚舉成員分配特定的值,你也可以做到:

enum CharacterClass
{
Warrior = 1,
Mage = 5,
Archer = 10,
Healer = 15
}

現在,如果我們運行之前的代碼來打印值,我們會得到:

戰士值: 1
法師值: 5
箭手值: 10
治疗師值: 15

這在遊戲或應用程序中需要枚舉值對應特定數字時非常有用。

枚舉和 Switch 語句

枚舉和 Switch 語句就像花生醬和果醬一樣 - 它們配合得天衣無縫!以下是一個例子:

static void DescribeClass(CharacterClass characterClass)
{
switch (characterClass)
{
case CharacterClass.Warrior:
Console.WriteLine("你是一個勇敢的戰士,戰鬥力強大!");
break;
case CharacterClass.Mage:
Console.WriteLine("你是一個智慧的法师,掌握了神秘的法術!");
break;
case CharacterClass.Archer:
Console.WriteLine("你是一個技術精湛的箭手,遠距離致命!");
break;
case CharacterClass.Healer:
Console.WriteLine("你是一個有同情心的治疗師,生命的守護者!");
break;
default:
Console.WriteLine("未知的職業。你是秘密職業嗎?");
break;
}
}

現在我們可以像這樣使用這個函數:

DescribeClass(CharacterClass.Mage);

它將輸出:

你是一個智慧的法师,掌握了神秘的法術!

解析枚舉

有時候,你可能需要將字符串轉換為枚舉值。例如,如果玩家輸入了他们選擇的職業。以下是如何操作的:

string input = "Archer";
if (Enum.TryParse(input, out CharacterClass playerClass))
{
Console.WriteLine($"你選擇了成為 {playerClass}!");
}
else
{
Console.WriteLine("那不是有效的角色職業!");
}

這段代碼將安全地嘗試將字符串"Archer"轉換為我們的CharacterClass枚舉。如果成功,它將輸出:

你選擇了成為 Archer!

枚舉方法

讓我們以一個枚舉方法的表格來結束:

方法 描述 示例
Enum.GetNames() 獲取指定枚舉中的常量名稱數組 string[] names = Enum.GetNames(typeof(CharacterClass));
Enum.GetValues() 返回指定枚舉中的常量值數組 CharacterClass[] values = (CharacterClass[])Enum.GetValues(typeof(CharacterClass));
Enum.IsDefined() 返回一個布爾值,指示指定枚舉中是否存在具有指定值的常量 bool isDefined = Enum.IsDefined(typeof(CharacterClass), "Warrior");
Enum.Parse() 將常量的字符串表示形式或整數值轉換為等效的枚舉對象 CharacterClass parsedEnum = (CharacterClass)Enum.Parse(typeof(CharacterClass), "Mage");
Enum.TryParse() 將常量的字符串表示形式或整數值轉換為等效的枚舉對象。返回值指示轉換是否成功 bool success = Enum.TryParse("Healer", out CharacterClass result);

親愛的學生們,你們剛剛通過掌握枚舉來提升了自己的C#技能。記住,熟能生巧,所以嘗試在不同的情節中創建你自己的枚舉。也許你可以為星期、披薩配料,甚至你喜歡的編程語言創建枚舉!

持續編程,持續學習,最重要的是,玩得開心!直到下一次,願你的代碼沒有bug,編譯速度快!

Credits: Image by storyset