C#枚举

本文介绍了枚举类型的基本概念,包括其定义方式、成员赋值规则、基础类型转换及与System.Enum的关系。此外还讨论了枚举成员的关联值设置方法及其在程序中的应用。


枚举类型是一种独特的值类型,用于声明一组命名的常量
enum Color
{
 Red,
 Green,
 Blue
}
每个枚举类型都有相应的整型,可以显示的声明为byte,short,long
默认为int
enum Color: long
{
 Red,
 Greeen,
 blue
}
多个枚举成员可以共享相同的关联值。示例:

enum Color

{

  Red,

  Green,

  Blue,

  Max = Blue

}

显示了一个枚举,其中的两个枚举成员(B1ue和Max)具有相同的关联值。

可以隐式地或显式地对枚举成员的关联值进行赋值。如果枚举成员的声明中具有常量表达式初始值设定项,

则该常量表达式的值(隐式地转换为枚举的基础类型)就是该枚举成员的关联值。如果枚举成员的声明中没

有初始值设定项,则将按下面的规则隐式地设置它的关联值:

— 如果枚举成员是枚举类型中声明的第一个枚举成员,则它的关联值为零。

— 否则,枚举成员的关联值将通过将前一个枚举成员(按照文本顺序)的关联值加1得到。这样增加后的值

必须在基础类型可表示的值的范围之内;否则,将发生编译时错误。
System.Enum类型
System.Enum类型是所有枚举类型的抽象基类(该类型不同于枚举类型的基础类型),并且在任何枚举类型

中都可以使用继承自System.Enum的成员。从任何枚举类型到System.Enum都存在装箱转换,并且从

System.Enum到任何枚举类型都存在拆箱转换。

注意,System.Enum本身并不是枚举类型。相反,它是一个类类型,所有枚举类型都派生自该类型。

System.Enum类型继承自System.ValueType类型(参见4.1.1小节),而后者又继承自object类型。在运行时

, System.Enum类型的值可以是null,或对任何枚举类型的已装箱值的引用。

每个枚举类型都定义一个独特的类型;在枚举类型和整型之间或在两个枚举类型之间进行转换时,需要使用

显式枚举转换。枚举类型的值域并不受它的枚举成员限制。具体来讲,一个枚举的基础类型的任何一个值都

可以强制转换到该枚举类型,并成为该枚举类型的一个独特的有效值。

枚举成员的类型为包含它们的枚举类型(出现在其他枚举成员初始值设定项中时除外)。在枚举类型E中声

明并且关联值为v的枚举成员的值为(E)v。
每个枚举类型都自动派生自System.Enum类(而该类又派生自System.ValueType和object)。因此,该类的

继承方法和属性可用于枚举类型的值。

### C# 枚举的使用方法及示例 #### 1. 基本定义 在 C# 中,枚举通过 `enum` 关键字声明。它是一种值类型,默认情况下继承自 `System.Enum`[^3]。以下是基本语法: ```csharp public enum Colors { Red, Green, Blue } ``` 上述代码中,`Colors` 是一个简单的枚举类型,其成员分别为 `Red`, `Green`, 和 `Blue`。 #### 2. 显式赋值 如果未显式指定值,则编译器会自动分配整数给每个枚举项,起始值为 0 并依次递增。也可以手动设置值: ```csharp public enum Numbers : byte { // 指定底层数据类型为byte One = 1, Two, Three } ``` 在此例子中,`Numbers.Two` 的值将是 2,而 `Numbers.Three` 将是 3。 #### 3. 获取枚举的所有值或名称 可以通过 `Enum.GetValues()` 或 `Enum.GetNames()` 来获取枚举的所有值或名称列表[^1]。例如: ```csharp foreach (var color in Enum.GetValues(typeof(Colors))) { Console.WriteLine(color); } // 输出结果: // Red // Green // Blue ``` 或者获取名称列表: ```csharp string[] names = Enum.GetNames(typeof(Numbers)); Console.WriteLine(string.Join(", ", names)); // 输出结果: // One, Two, Three ``` #### 4. 转换字符串到枚举 可以利用 `Enum.Parse` 方法将字符串转换成对应的枚举值[^2]: ```csharp string input = "Two"; Numbers number = (Numbers)Enum.Parse(typeof(Numbers), input); if (number == Numbers.Two) { Console.WriteLine("Matched!"); } else { Console.WriteLine("Not matched."); } ``` 注意:当输入不匹配任何枚举值时,可能会抛出异常,因此建议结合 `TryParse` 进行安全处理。 #### 5. 绑定 ComboBox 控件 对于 UI 开发场景,比如绑定 `ComboBox` 到枚举值,可按如下方式实现[^4]: ```csharp public enum OperEnum { None = 1, User = 2, Admin = 3 } comboBox.DataSource = Enum.GetValues(typeof(OperEnum)); ``` 这样即可将所有枚举值加载至下拉框供用户选择。 --- ### 总结 C# 枚举提供了简洁的方式来表示一组固定的常量集合,并支持丰富的操作功能如遍历、解析以及与其他组件集成等功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值