枚举中的字符串

时间:2010-08-24 21:13:15

标签: c#

给出类似的枚举:

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

从数据库中,我得到1或2.

当查询返回1时,我需要连接0x(显示为十六进制值)。

我连接0x,当我分配时,我得到一个无效的参数异常。

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

如何做到这一点?

4 个答案:

答案 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));

或许我误解了你的问题。