2010-08-24 25 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");