You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#枚举默认值选取规则及指定枚举数值类型的方法咨询

我在使用如下代码时:

enum Programs {BSE, BCS, BSDS}

枚举会默认选择"BSE"作为默认值,但当我使用如下代码时:

enum Year: ushort {year1=2021, year2=2022}

却无法得到2021的默认年份。请问该问题如何解决?C#中有没有办法为枚举指定数值类型?


默认值异常的原因

C#中所有值类型的默认值为内存位全零对应的取值,枚举属于值类型,因此它的默认值永远是0转换为当前枚举类型的结果,和枚举成员的定义顺序、手动赋值没有关联。
你写的第一个枚举没有手动指定成员值,系统默认从0开始递增赋值,BSE对应的值就是0,因此默认初始化的结果就是BSE。第二个枚举的所有成员赋值都大于0,不存在值为0的命名成员,因此默认初始化只会得到一个值为0、无对应命名的非法枚举值,不会返回2021。

解决方法

  • 新增值为0的枚举成员
    如果业务允许存在未选择的初始状态,可以新增一个对应值为0的默认成员即可:
enum Year: ushort {
    None = 0,
    year1 = 2021,
    year2 = 2022
}

如果业务要求默认值就是year1,且允许调整成员的绑定值,也可以直接把year1的赋值改为0。

  • 显式指定初始值
    如果必须保留year1对应2021的规则,就在所有使用枚举的位置手动初始化,不要依赖系统默认值:
// 局部变量声明时赋值
Year studentYear = Year.year1;

// 类属性默认赋值
class Enrollment {
    public Year JoinYear { get; set; } = Year.year1;
}

// 方法默认参数指定
void GetEnrollmentCount(Year year = Year.year1) {
    // 业务逻辑
}

枚举指定数值类型的方法

你代码中写的enum Year: ushort就是指定枚举底层数值类型的正确语法,C#支持枚举绑定以下整型作为底层类型:byte、sbyte、short、ushort、int、uint、long、ulong,如果不手动指定,枚举的默认底层类型为int。


内容的提问来源于stack exchange,提问作者Bill Joeden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:27:00