在 C# 中从枚举中获取字符串名称

Vik*_*nte -1 .net c# enums

我已声明枚举如下

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 来获取字符串。

Ami*_*mit 9

您可以将描述标签添加到枚举中,如下所示:

\n
public 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}\n
Run Code Online (Sandbox Code Playgroud)\n

然后从枚举中分配一个描述字符串,如下所示:

\n
State stateVal = State.GOA;\nstring stateName = GetEnumDescription(stateVal);\n
Run Code Online (Sandbox Code Playgroud)\n

如果您的状态如评论中提到的那样,您仍然可以轻松地将其转换为枚举类型。

\n
int stateVal = 2;\nstring stateName = GetEnumDescription((State)stateVal);\n
Run Code Online (Sandbox Code Playgroud)\n

GetEnumDescription()它返回枚举名称的字符串。

\n
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}\n
Run Code Online (Sandbox Code Playgroud)\n

笔记

\n

由于对枚举的操作比字符串操作成本更低,因此枚举的字符串值应仅限于显示目的,而在内部,您必须在逻辑中使用枚举本身。

\n

更优选获取枚举的字符串值的方式。就好像您在代码中的很多地方使用了枚举,并且需要更改显示上的文本一样,您只需更改一处的文本。

\n

例如,

\n

假设您在整个项目中使用了这个枚举,然后您意识到古吉拉特语的拼写是错误的。如果你改变 enum 本身的文本,你需要通过整个代码来改变它(值得庆幸的是,Visual\xc2\xa0Studio 让它变得更容易一些),而如果你使用Description作为要显示的标签,你只需要改变它仅有的。

\n

或者

\n

当名称中有空格时(必须显示)。

\n

例如,“查谟和克什米尔”是印度的另一个邦。

\n

您可以在枚举名称中使用缩写(此处为“JK”),并在描述中使用空格来完成字符串。

\n


Rea*_*eap 6

您可以简单地使用nameof 表达式来获取枚举的名称、枚举值、属性、方法、类名等。

使用 nameof 表达式的最快的编译时间解决方案。

返回枚举的文字。

public enum MyEnum {
    CSV,
    Excel
}

// calling code
string enumAsString = nameof(MyEnum.CSV) // enumAsString = "CSV"
Run Code Online (Sandbox Code Playgroud)