C# 枚举完全指南:定义、使用、底层类型与实战技巧
枚举是一组命名整数常量的集合。使用 enum 关键字声明枚举类型。C# 枚举是值数据类型,包含自身值,不能继承也不能被继承。
声明枚举变量
通用语法:
enum <enum_name> { enumeration list };
enum_name:枚举类型名称enumeration list:逗号分隔的标识符列表
枚举列表中每个符号代表整数值,比前一个符号大 1。默认首个符号值为 0。
示例
enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
// Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6
完整示例
using System;
namespace EnumApplication {
class EnumProgram {
enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
static void Main(string[] args) {
int WeekdayStart = (int)Days.Mon;
int WeekdayEnd = (int)Days.Fri;
Console.WriteLine("Monday: {0}", WeekdayStart); // 1
Console.WriteLine("Friday: {0}", WeekdayEnd); // 5
Console.ReadKey();
}
}
}
自定义枚举值
可显式指定枚举成员值:
enum StatusCode {
Success = 200,
NotFound = 404,
ServerError = 500
}
指定底层类型
默认底层类型为 int,可指定为 byte、sbyte、short、ushort、uint、long、ulong:
enum Color : byte { Red = 1, Green = 2, Blue = 3 }
常用操作
| 操作 | 代码示例 | 说明 |
|---|---|---|
| 枚举转整数 | (int)Days.Mon | 强制转换获取底层值 |
| 整数转枚举 | (Days)3 | 需确保值在定义范围内 |
| 字符串转枚举 | Enum.Parse<Days>("Mon") | 区分大小写 |
| 枚举转字符串 | Days.Mon.ToString() | 返回 "Mon" |
| 获取所有值 | Enum.GetValues<Days>() | 返回数组 |
| 获取所有名称 | Enum.GetNames<Days>() | 返回字符串数组 |
| 判断定义 | Enum.IsDefined<Days>(3) | 返回 bool |
| 标志位枚举 | [Flags] enum Perm { Read=1, Write=2, Execute=4 } | 支持位运算组合 |
Flags 枚举示例
[Flags]
enum FileAccess {
None = 0,
Read = 1,
Write = 2,
Execute = 4,
ReadWrite = Read | Write // 3
}
FileAccess access = FileAccess.Read | FileAccess.Write;
Console.WriteLine(access.HasFlag(FileAccess.Read)); // True
Console.WriteLine(access); // Read, Write
最佳实践
- 枚举成员使用 PascalCase 命名
- 单数名词命名枚举类型(如
Day而非Days) - 标志位枚举加
[Flags]特性,值用 2 的幂 - 避免为枚举值留空缺口,除非语义需要
- 公共 API 暴露的枚举考虑加
[Serializable]
C语言