枚举为字符串

时间:2014-01-30 09:40:59

标签: c# string enums int

enum ValidationMessages
{
    C01_OOHArrestRequired = "Test",
    Trivial,
    Regular,
    Important,
    Critical
};

我有上面的代码。我希望能够创建我可以使用的枚举但是字符串不是整数。

这样我就可以在UI中显示相同的字符串,用于验证错误,然后在我的单元测试中测试它们,并让消息来自同一个地方(静态)。

但它说“无法将字符串转换为int”

如何将enum作为字符串?

4 个答案:

答案 0 :(得分:3)

您不能拥有enum类型string,因为enums是值类型(byte,sbyte,short,ushort,int,uint,long或ulong)。

而是使用const字段创建一个静态类:

public static class CardiologyValidationMessages
{
    public const string C01_OOHArrestRequired = "OOH Arrest is required when 1 or more Procedures Performed has IsCoronary = True"
}

答案 1 :(得分:1)

你做不到。来自MSDN

  

枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong。

您可以使用字典将枚举映射到错误消息:Dictionary<CardiologyValidationMessages, string>

答案 2 :(得分:1)

"An enumeration is a set of named constants whose underlying type is any integral type"

但是,您可以编写转换函数。

string ToValidationMessageString(ValidationMessage value)
{
    switch(value)
    {
        case C01_OOHArrestRequired:
            return "Test";

        default:
            return value.ToString();
    }
}

或其他一些。

答案 3 :(得分:0)

  

任何人都知道如何将枚举作为字符串吗?

你不能。

来自C#语言规范第5版(随Visual Studio 2013提供)第4.1.9节

  

枚举类型是具有命名常量的不同类型。每个枚举类型都有一个底层类型,必须是byte,sbyte,short,ushort,int,uint,long或ulong。

但是,您可以将DisplayAttribute的名称应用于枚举值,然后使用常用的反射方法获取给定值的名称。