繁体   English   中英

枚举中的字符串

[英]string in an Enum

给定一个像这样的枚举:

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

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

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

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

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

如何才能做到这一点?

Test = (Test)int.Parse(reader.GetString(0));

那只是最低限度的代码,您需要执行错误检查和所有这些好东西。

好吧,总有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");

我认为您正在尝试执行以下操作:

以十进制数字的字符串表示形式,并以十六进制形式显示该数字。

如果是这样,请尝试以下操作:

String x = String.Format("{0:X2}", Int.Parse(myInteger));

或者,也许我误解了您的问题所在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM