关于.net:从C#中获取Enum中的字符串名称

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

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

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"),并在描述中使用空格填充完整的字符串。