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

时间:2018-05-20 10:33:48

标签: c# .net enums

我已将枚举声明如下

public enum State
    {
        KARNATAKA = 1,
        GUJRAT = 2,
        ASSAM = 3,
        MAHARASHTRA = 4,
        GOA = 5
    }

从外部来源,我得到的状态值为1或2或3或4或5。

根据我得到的值,我需要查找此枚举并获取其字符串。

对于Ex:如果输入值为1,我需要将KARNATAKA作为字符串返回。同样,如果输入值为5,我需要将GOA作为字符串返回。

使用CASE或IFELSE是否可以轻松获取字符串。

2 个答案:

答案 0 :(得分:3)

您可以简单地使用lst1 <- split(df, df$x) expression来获取枚举的名称,枚举值,属性,方法,类名等。

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

返回枚举的文字。

nameof

答案 1 :(得分:1)

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

public enum State
{
    [Description("Karnataka")]
    KARNATAKA = 1,
    [Description("Gujarat")]
    GUJRAT = 2,
    [Description("Assam")]
    ASSAM = 3,
    [Description("Maharashtra")]
    MAHARASHTRA = 4,
    [Description("Goa")]
    GOA = 5
}

然后从枚举中获取指定的Desription字符串,如下所示

State stateVal = State.GOA;
string stateName = GetEnumDescription(stateVal);

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

int stateVal = 2;
string stateName = GetEnumDescription((State)stateVal);   

GetEnumDescription()返回Enumerations名称的字符串。

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;
}

注意

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

获取枚举字符串值的方法更为可取。好像您已经在代码中的许多地方使用了枚举,并且您需要更改显示的文本,您只需要在一个地方更改文本。

例如,

假设你在整个项目中使用了这个枚举,然后你意识到你的古吉拉特语的拼写是错误的,如果你改变了enum的文本,你需要通过整个代码改变它(谢天谢地,视觉工作室让它变得容易一些)如果您使用描述作为标签进行显示,则只需要更改它。

当您在名称中留空时(您必须显示)。

EG。 “查谟和克什米尔”是印度的另一个州。

您可以在枚举名称中包含缩写(此处为“JK”),并在说明中包含空格的完整字符串。