C#枚举成员以数字开头的报错解决办法咨询
C#枚举数字开头命名的解决办法
C#的标识符命名规则明确禁止以数字开头,所以直接写9x19这种枚举成员名肯定报错,不存在非常规的绕过方法,以下是几种实用的合规方案:
方案1:添加前缀或转写数字为英文
这是最直接且符合编码规范的方式,比如给每个成员加前缀,或者把开头的数字转成英文拼写:
// 加前缀写法 public enum Caliber { Cal_9x19, Cal_9x18, Cal_5x56 } // 数字转英文写法 public enum Caliber { NineX19, NineX18, FiveX56 }
方案2:用特性映射显示名称
如果需要在界面或日志中展示真实的口径字符串,但代码里保持合规命名,可以用DescriptionAttribute做映射:
using System.ComponentModel; using System.Reflection; public enum Caliber { [Description("9x19")] NineX19, [Description("9x18")] NineX18, [Description("5x56")] FiveX56 } // 扩展方法获取描述文本 public static class EnumExtensions { public static string GetCaliberName(this Caliber caliber) { FieldInfo field = caliber.GetType().GetField(caliber.ToString()); DescriptionAttribute attr = field?.GetCustomAttribute<DescriptionAttribute>(); return attr?.Description ?? caliber.ToString(); } }
使用时直接调用扩展方法:Caliber.NineX19.GetCaliberName()就能得到"9x19"。
方案3:用@转义标识符(不推荐)
C#允许用@作为标识符的前缀来转义关键字或打破命名规则,比如:
public enum Caliber { @9x19, @9x18, @5x56 }
虽然这段代码能正常编译,但这种写法不符合通用编码规范,会降低代码可读性,团队协作场景下不建议使用。
内容的提问来源于stack exchange,提问作者Birger Evansson
相关产品推荐
相关产品推荐

