2014-01-30 214 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爲枚舉的值,然後使用通常的反射方法來給定值取的名字。