给定一个像枚举:串在一个枚举
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