2014-01-30 176 views
0
enum ValidationMessages 
{ 
    C01_OOHArrestRequired = "Test", 
    Trivial, 
    Regular, 
    Important, 
    Critical 
}; 

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

这是我可以在UI中显示相同的字符串验证错误,然后在我的单元测试中测试它们,并让消息从相同的地方(静态)传出。

但它说:“不能把字符串转换为int”

如何有enum为字符串?

+1

然后,不要使用枚举。用一堆常量使用一个类。 – Candide

+2

看到这个有趣的问题:http://stackoverflow.com/questions/424366/c-sharp-string-enums –

回答

3

你不能有string类型的enum,如enums是值类型(字节,为sbyte,短,USHORT ,int,uint,long或ulong)。

而是创建一个静态类,常量字段:

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

这是否具有与ENUM大致相同的性能?例如。没有主要的性能影响? – LmC

+1

没有性能影响。编译器可以像内联枚举值一样嵌入字符串。你的应用程序有更好的地方来提高性能比枚举用法。 –

+0

谢谢! 100%最佳/简单的答案。 – LmC

1

你不行。来自MSDN

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

你可以做的是有一个枚举映射到错误消息的字典:Dictionary<CardiologyValidationMessages, string>

0

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

你不行。

从C#语言规范版本5节4.1.9

枚举类型是一个独特的类型与名为常数(与Visual Studio 2013提供)。每个枚举类型都有一个基础类型,它必须是byte,sbyte,short,ushort,int,uint,long或ulong。

但是你可以用名义申请的DisplayAttribute为枚举的值,然后使用通常的反射方法来给定值取的名字。