给出类似的枚举:
enum Test
{
Hi=0x1,
Hello=0x2
}
从数据库中,我得到1或2.
当查询返回1时,我需要连接0x(显示为十六进制值)。
我连接0x,当我分配时,我得到一个无效的参数异常。
(Test)Enum.Parse(typeof(Test), reader.GetString(0));
如何做到这一点?
答案 0 :(得分:1)
Test = (Test)int.Parse(reader.GetString(0));
这是最低限度的代码,你需要做错误检查和所有好东西。
答案 1 :(得分: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;
}
但是,根据你接受的答案,似乎我可能误解了你的问题!不过,我在这里留下这个答案,以防它对任何人都有用。
答案 2 :(得分:1)
我不确定你要做什么,但如果你想在数据库中转换一个字符串值“0x0”或“0x1”,那么你可以使用类似下面代码的t1&amp; 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");
答案 3 :(得分:0)
我认为你要做的是:
取一个十进制数的字符串表示,并显示它 以十六进制形式出现的数字。
如果是这样,试试这个:
String x = String.Format("{0:X2}", Int.Parse(myInteger));
或许我误解了你的问题。