給定一個像枚舉:串在一個枚舉
enum Test
{
Hi=0x1,
Hello=0x2
}
從數據庫,我得到或者是1或2。
我需要連接0X(顯示爲十六進制的值),當查詢返回1.
我連接0x,當我分配時,我得到一個無效的參數異常。
(Test)Enum.Parse(typeof(Test), reader.GetString(0));
這怎麼辦?
給定一個像枚舉:串在一個枚舉
enum Test
{
Hi=0x1,
Hello=0x2
}
從數據庫,我得到或者是1或2。
我需要連接0X(顯示爲十六進制的值),當查詢返回1.
我連接0x,當我分配時,我得到一個無效的參數異常。
(Test)Enum.Parse(typeof(Test), reader.GetString(0));
這怎麼辦?
我認爲你正在試圖做的是這樣的:
以一個十進制數的字符串表示,並顯示在十六進制形式 號。
如果是的話,試試這個:
String x = String.Format("{0:X2}", Int.Parse(myInteger));
也許我誤解你的問題是什麼。
在數據庫中有1或2(整數),枚舉有嗨,你好,爲例:嗨= 0x1,你好= 0x2,所以當我從數據庫得到1或2我需要分配給枚舉,換句話說在數據庫中的十進制值存儲,我需要在前端顯示來自枚舉的六進制值。 – Sharpeye500 2010-08-24 21:38:45
它應該在一個枚舉中,我不能直接分配。 – Sharpeye500 2010-08-24 21:40:13
看起來這是我的方案最接近的方法。 – Sharpeye500 2010-08-24 22:03:25
Test = (Test)int.Parse(reader.GetString(0));
這是最基本的代碼,你需要做錯誤檢查和所有好東西。
謝謝,但是當我嘗試這樣,我得到System.FormatException:輸入字符串不是在一個正確的格式 – Sharpeye500 2010-08-24 21:41:01
那麼,總是有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;
}
但是,根據您接受了答案,看來我可能誤解了你題!不過,如果任何人都有用,我會在這裏留下這個答案。
我不確定你要做什麼,但是如果你想在一個數據庫中將字符串值轉換爲「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");
reader.GetString(0)是什麼值?如果不是「嗨」或「你好」,這是行不通的。 – recursive 2010-08-24 21:20:30