2012-04-26 53 views
0

我保留一個靜態字典來映射存儲在數據庫中的簡單整數到一個枚舉值。更好的寫靜態字典

static Dictionary<long, EModelType> AttributeIdTypeToEModelType = 
    new Dictionary<long, EModelType>() 
    { 
     {1, EModelType.StatStr}, 
     {6, EModelType.HistStr}, 
     {7, EModelType.HistVal} 
    }; 

最大的好處是,我用它來直接獲取我的枚舉值,因爲數據從數據庫到達。

typ = AttributeIdTypeToEModelType[i]; 

這個系統的使用是整潔的,但它看起來並不乾淨,我有一個靜態詞典只是爲了這個。

我沒有機會試圖找到更清晰的方式來使用枚舉數並重寫它們的值。

有什麼建議嗎?

回答

4

你並不需要一個Dictionary投的int爲適當的Enum類型:使用Enum.ToObject

var type = (EModelType)yourInt; 

或:

var type = Enum.ToObject(typeof(EModelType) , yourInt); 

,您可以檢查它與Enum.IsDefined存在:

if (! Enum.IsDefined(typeof(EModelType), yourInt)) throw new ArgumentException("Illegal type"); 
+0

太棒了!這就是我所錯過的。謝謝 – 2012-04-26 13:40:32

1

如果在數據庫中的值是一個字符串,然後使用:

EnumType x = (EnumType)Enum.Parse(typeof(EnumType), dr[0].ToString()); 

如果在數據庫中的值是一個長期的,然後使用:

EnumType x = (EnumType)dr[0]; 

如果你需要一個枚舉的長期價值使用:

long x = (long)EnumType.SomeEnum 
+0

謝謝,你的第二個解決方案只是一個。 – 2012-04-26 13:44:08

0

你應該有int後盾類型定義枚舉,像這樣:

public enum EModelType : int 
{ 
    StatStr = 1, 
    HistStr = 6, 
    HistVal = 7 
} 

然後,像蒂姆和克里斯建議的那樣,將數據庫中的整數轉換或解析爲您的枚舉類型。

+0

這就是我的意思是「使用統計員並重寫他們的值」是 – 2012-04-26 13:44:48