2010-08-24 55 views
0

給定一個像枚舉:串在一個枚舉

enum Test 
{ 
    Hi=0x1, 
    Hello=0x2 
} 

從數據庫,我得到或者是1或2。

我需要連接0X(顯示爲十六進制的值),當查詢返回1.

我連接0x,當我分配時,我得到一個無效的參數異常。

(Test)Enum.Parse(typeof(Test), reader.GetString(0)); 

這怎麼辦?

+0

reader.GetString(0)是什麼值?如果不是「嗨」或「你好」,這是行不通的。 – recursive 2010-08-24 21:20:30

回答

0

我認爲你正在試圖做的是這樣的:

以一個十進制數的字符串表示,並顯示在十六進制形式 號。

如果是的話,試試這個:

String x = String.Format("{0:X2}", Int.Parse(myInteger)); 

也許我誤解你的問題是什麼。

+0

在數據庫中有1或2(整數),枚舉有嗨,你好,爲例:嗨= 0x1,你好= 0x2,所以當我從數據庫得到1或2我需要分配給枚舉,換句話說在數據庫中的十進制值存儲,我需要在前端顯示來自枚舉的六進制值。 – Sharpeye500 2010-08-24 21:38:45

+0

它應該在一個枚舉中,我不能直接分配。 – Sharpeye500 2010-08-24 21:40:13

+0

看起來這是我的方案最接近的方法。 – Sharpeye500 2010-08-24 22:03:25

1
Test = (Test)int.Parse(reader.GetString(0)); 

這是最基本的代碼,你需要做錯誤檢查和所有好東西。

+0

謝謝,但是當我嘗試這樣,我得到System.FormatException:輸入字符串不是在一個正確的格式 – Sharpeye500 2010-08-24 21:41:01

1

那麼,總是有Enum.TryParse。如果你不是在.NET 4.0然而,實施了類似的方法,供自己使用只需要幾個步驟:

static bool TryParseEnum<TEnum>(string text, out TEnum value) 
{ 
    value = default(T); 

    int number; 
    if (int.TryParse(text, out number) && Enum.IsDefined(typeof(TEnum), number)) 
    { 
     // This awkward double-cast is unfortunately necessary 
     // due to the lack of a where T : enum constraint -- 
     // the compiler cannot guarantee that T is castable from int. 
     value = (TEnum)(object)number; 

     return true; 
    } 

    return false; 
} 

但是,根據您接受了答案,看來我可能誤解了你題!不過,如果任何人都有用,我會在這裏留下這個答案。

1

我不確定你要做什麼,但是如果你想在一個數據庫中將字符串值轉換爲「0x0」或「0x1」,那麼你可以使用類似下面的代碼t1 & t3 :

Test t1 = (Test) Enum.Parse(typeof (Test), Convert.ToInt32("0x0", 16).ToString()); 
Test t2 = (Test) Enum.Parse(typeof(Test), "0"); 
Test t3 = (Test) Enum.Parse(typeof(Test), Convert.ToInt32("0x1", 16).ToString()); 
Test t4 = (Test) Enum.Parse(typeof(Test), "1");