我已声明枚举如下
public enum State
{
KARNATAKA = 1,
GUJRAT = 2,
ASSAM = 3,
MAHARASHTRA = 4,
GOA = 5
}
Run Code Online (Sandbox Code Playgroud)
从外部来源,我得到状态值为 1 或 2 或 3 或 4 或 5。
根据我得到的值,我需要查找这个枚举并获取它的字符串。
例如:如果输入值为 1,我需要将 KARNATAKA 作为字符串返回。同样,如果输入值为 5,我需要将 GOA 作为字符串返回。
是否有一种简单的方法可以不使用 CASE 或 IFELSE 来获取字符串。
您可以将描述标签添加到枚举中,如下所示:
\npublic enum State\n{\n [Description("Karnataka")]\n KARNATAKA = 1,\n [Description("Gujarat")]\n GUJRAT = 2,\n [Description("Assam")]\n ASSAM = 3,\n [Description("Maharashtra")]\n MAHARASHTRA = 4,\n [Description("Goa")]\n GOA = 5\n}\nRun Code Online (Sandbox Code Playgroud)\n然后从枚举中分配一个描述字符串,如下所示:
\nState stateVal = State.GOA;\nstring stateName = GetEnumDescription(stateVal);\nRun Code Online (Sandbox Code Playgroud)\n如果您的状态如评论中提到的那样,您仍然可以轻松地将其转换为枚举类型。
\nint stateVal = 2;\nstring stateName = GetEnumDescription((State)stateVal);\nRun Code Online (Sandbox Code Playgroud)\nGetEnumDescription()它返回枚举名称的字符串。
public static string GetEnumDescription(Enum enumVal)\n{\n System.Reflection.MemberInfo[] memInfo = enumVal.GetType().GetMember(enumVal.ToString());\n DescriptionAttribute attribute = CustomAttributeExtensions.GetCustomAttribute<DescriptionAttribute>(memInfo[0]);\n return attribute.Description;\n}\nRun Code Online (Sandbox Code Playgroud)\n笔记
\n由于对枚举的操作比字符串操作成本更低,因此枚举的字符串值应仅限于显示目的,而在内部,您必须在逻辑中使用枚举本身。
\n更优选获取枚举的字符串值的方式。就好像您在代码中的很多地方使用了枚举,并且需要更改显示上的文本一样,您只需更改一处的文本。
\n例如,
\n假设您在整个项目中使用了这个枚举,然后您意识到古吉拉特语的拼写是错误的。如果你改变 enum 本身的文本,你需要通过整个代码来改变它(值得庆幸的是,Visual\xc2\xa0Studio 让它变得更容易一些),而如果你使用Description作为要显示的标签,你只需要改变它仅有的。
\n或者
\n当名称中有空格时(必须显示)。
\n例如,“查谟和克什米尔”是印度的另一个邦。
\n您可以在枚举名称中使用缩写(此处为“JK”),并在描述中使用空格来完成字符串。
\n您可以简单地使用nameof 表达式来获取枚举的名称、枚举值、属性、方法、类名等。
使用 nameof 表达式的最快的编译时间解决方案。
返回枚举的文字。
public enum MyEnum {
CSV,
Excel
}
// calling code
string enumAsString = nameof(MyEnum.CSV) // enumAsString = "CSV"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12865 次 |
| 最近记录: |