Get String Name from Enum in C#
我有一个ENUM的符合以下
1 2 3 4 5 6 7 8 | public enum State { KARNATAKA = 1, GUJRAT = 2, ASSAM = 3, MAHARASHTRA = 4, GOA = 5 } |
我得到了来自外部源的状态值,或1或2或3或4或5。
基于价值的我有,我要查找一字符串枚举和得到它。
如果输入的是以前的值是:1,我要返回的字符串的卡纳塔克邦。同样,如果输入值是5,我需要返回果阿的字符串。
有简单的办法获得使用字符串或带出ifelse的案例。
您可以向枚举中添加描述标记,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 | public enum State { [Description("Karnataka")] KARNATAKA = 1, [Description("Gujarat")] GUJRAT = 2, [Description("Assam")] ASSAM = 3, [Description("Maharashtra")] MAHARASHTRA = 4, [Description("Goa")] GOA = 5 } |
然后从枚举中获取分配的描述字符串,如下所示
1 2 | State stateVal = State.GOA; string stateName = GetEnumDescription(stateVal); |
如果您的状态与前面提到的注释相同,那么仍然可以轻松地将其转换为枚举类型。
1 2 | int stateVal = 2; string stateName = GetEnumDescription((State)stateVal); |
返回枚举名称字符串的
1 2 3 4 5 6 | public static string GetEnumDescription(Enum enumVal) { System.Reflection.MemberInfo[] memInfo = enumVal.GetType().GetMember(enumVal.ToString()); DescriptionAttribute attribute = CustomAttributeExtensions.GetCustomAttribute<DescriptionAttribute>(memInfo[0]); return attribute.Description; } |
注释
由于枚举上的操作比字符串操作成本低,因此枚举的字符串值应仅限于显示目的,而在内部必须在逻辑中使用枚举本身。
获取枚举的字符串值的方法更可取。就像在代码中的很多地方使用了枚举,并且需要在显示时更改文本一样,您只需要在一个地方更改文本。
例如,
假设您已经在整个项目中使用了这个枚举,然后您意识到古吉拉特邦的拼写是错误的,如果您自己更改了枚举的文本,那么您需要通过整个代码来更改它(谢天谢地,Visual Studio使其变得更简单),而如果您使用描述作为要显示的标签,则只需要更改它。
或
当您在名称中留出空间时(必须显示)。
查谟和克什米尔是印度的另一个州。
您可以在枚举名称中使用缩写词(此处为"jk"),并在描述中使用空格填充完整的字符串。