C# Enum(枚举)示例

C# 枚举
枚举在任何编程语言中都用于定义一组常量值。例如,可以将一周中的各天定义为枚举,并在程序中的任何地方使用。在 C# 中,枚举是借助关键字“enum”定义的。
让我们看一个例子来了解如何使用“enum”关键字。
在我们的示例中,我们将定义一个名为 days 的枚举,用于存储一周中的天数。对于每个示例,我们将仅修改 Program.cs 文件中的 main 函数。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat}; static void Main(string[] args) { Console.Write(Days.Sun); Console.ReadKey(); } } }
Code 解释:-
- 枚举 数据类型 指定用于声明一个枚举。枚举的名称为 Days。一周中的所有天数都被指定为枚举的值。
- 最后,console.write 函数用于显示枚举的值之一。
如果上述代码输入正确,并且程序成功执行,则会显示以下输出。
输出:
从输出中,您可以看到枚举的“Sun”值显示在控制台中。
为什么要在 C# 中使用枚举?
枚举类型使程序更易读、更安全、更易于维护。枚举类型不会像传统做法那样在代码中散布毫无意义的数字(有时被称为“魔法数字”),而是为每个值赋予一个描述性的名称,明确其含义。
- 可读性: 像 Days.Fri 这样的名称比数字 5 要清晰得多,因此任何阅读代码的人都能立即理解其含义。
- 型式安全: 使用枚举类型声明的变量只能存储已定义成员中的一个,这可以防止无效值混入。ping 英寸
- 可维护性: 相关常量位于同一位置,因此添加或重命名值会相应地更新整个程序。
- 数据绑定: WPF 和 ASP.NET 等框架可以将枚举绑定到下拉列表,这使得枚举在构建用户界面时非常有用。
由于编译器会检查每个赋值是否在允许的成员范围内,枚举还可以帮助在程序运行之前及早发现错误。
为 C# 枚举赋值自定义值
默认情况下,C# 会将枚举类型的第一个成员赋值为 0,并将后续每个成员的值递增 1。在上面的 Days 枚举中,Sun 等于 0,Mon 等于 1,Sat 等于 6。您可以通过指定显式数值来覆盖这些默认值。
- 显式值: 写入枚举 Level {Low = 1, Medium = 5, High = 10} 将每个成员设置为选定的数字,而不是默认序列。
- 部分作业: 如果只给部分成员赋值,编译器会从最后一个赋值开始对后续成员进行编号。
- 底层类型: 枚举类型默认以 int 类型存储成员,但你可以将其基于 byte、short 或 long 类型来节省内存或扩展范围。
当数字必须与外部系统(例如数据库代码或协议常量)匹配时,自定义值非常有用,这样枚举就能准确地反映真实数据。
如何将 C# 枚举转换为 int、string 和 flags 类型
C# 经常需要将枚举值转换为另一种形式,例如将其存储为数字或从文本中读取。这些转换有几种标准方法。
- 枚举类型转整数类型: 显式强制转换(例如 (int)Days.Wed)返回底层整数,这对于存储或算术运算很有用。
- 整数转枚举: 反过来,例如 (Days)3,会将数字转换回匹配的枚举成员。
- 字符串转枚举: Enum.Parse 和更安全的 Enum.TryParse 可以将“Fri”之类的名称转换为 Days.Fri 成员,而不会因无效文本而抛出异常。
- 枚举类型转字符串: 对任何成员调用 ToString() 都会返回其名称,因此 Days.Sun.ToString() 会生成“Sun”用于显示或记录。
- 会员名单: Enum.GetValues 和 Enum.GetNames 返回每个值或名称,这有助于填充菜单或验证输入。
当枚举应该表示多个选项的组合而不是单个选项时,应用 Flags 属性,并为每个成员赋予 2 的幂,例如 1、2、4 和 8。然后,您可以使用按位或运算符组合成员,并使用 HasFlag 方法测试特定选项。
这些转换技术使得枚举类型能够在易读名称、存储数字和组合标志集之间清晰地转换,保持ping 程序的其余部分既符合规范又易于理解。


