列舉 是限定「可選值集合」的最佳利器。無論是馬桶類型(男/女/狗)、象棋陣營(紅/黑),還是性別(男/女/人妖),把合法選項封裝成 enum,既能讓 IntelliSense 提示,又能在編譯期攔截非法值。本文聚焦兩個實用技巧:Enum.GetNames 取得所有成員名稱、Enum.Parse/TryParse 字串轉列舉,並示範直接綁定 ComboBox 的完整流程。
enum Rencai { 白癡, 奇才, 鬼才 }
string[] names = Enum.GetNames(typeof(Rencai));
// 結果:["白癡", "奇才", "鬼才"]
這在「把列舉綁定到下拉選單」時極其好用——不需手寫字串陣列,日後增減列舉值,UI 自動同步。
string input = "奇才";
Rencai rc = (Rencai)Enum.Parse(typeof(Rencai), input); // 可能拋例外
bool ok = Enum.TryParse(input, out Rencai rc2); // 建議用此法
TryParse 不會拋例外,回傳 bool 表示成功與否,適合處理使用者輸入或資料庫讀取的字串。
public enum Gender { 男, 女, 人妖 }
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
// 一行綁定:Enum.GetNames 直接當 DataSource
comboBox1.DataSource = Enum.GetNames(typeof(Gender));
}
private void btnConfirm_Click(object sender, EventArgs e) {
if (comboBox1.SelectedIndex == -1) return;
string selected = comboBox1.SelectedItem as string;
if (Enum.TryParse(selected, out Gender g)) {
switch (g) {
case Gender.男: txtResult.Text = "您是一位帥哥。"; break;
case Gender.女: txtResult.Text = "您是一位美女。"; break;
case Gender.人妖: txtResult.Text = "發現未知物種。"; break;
}
}
}
}

Read | Write),記得加 [Flags],ToString() 會自動顯示「Read, Write」。int,可指定 enum Color : byte { ... } 節省記憶體。Enum.Parse 內部用反射,高頻呼叫建議快取 Dictionary<string, TEnum>。善用列舉,不只是「定義常數」,更是「讓非法狀態無法表示」的領域建模利器。下次見到 if (type == 1 || type == 2 ...),請毫不猶豫地重構成 enum。