[英]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.