我有一个枚举:
public enum baseKey : uint
{
HKEY_CLASSES_ROOT = 0x80000000,
HKEY_CURRENT_USER = 0x80000001,
HKEY_LOCAL_MACHINE = 0x80000002,
HKEY_USERS = 0x80000003,
HKEY_CURRENT_CONFIG = 0x80000005
}
给定字符串HKEY_LOCAL_MACHINE
,如何根据枚举获取值0x80000002
?
答案 0 :(得分:157)
baseKey choice;
if (Enum.TryParse("HKEY_LOCAL_MACHINE", out choice)) {
uint value = (uint)choice;
// `value` is what you're looking for
} else { /* error: the string was not an enum member */ }
在.NET 4.5之前,您必须执行以下操作,这更容易出错,并在传递无效字符串时抛出异常:
(uint)Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE")
答案 1 :(得分:27)
使用Enum.TryParse,您不需要异常处理:
baseKey e;
if ( Enum.TryParse(s, out e) )
{
...
}
答案 2 :(得分:20)
var value = (uint) Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE");
答案 3 :(得分:16)
有一些错误处理......
uint key = 0;
string s = "HKEY_LOCAL_MACHINE";
try
{
key = (uint)Enum.Parse(typeof(baseKey), s);
}
catch(ArgumentException)
{
//unknown string or s is null
}
答案 4 :(得分:1)
var value = (uint)Enum.Parse(typeof(basekey), "HKEY_LOCAL_MACHINE", true);
此代码段说明从字符串中获取枚举值。要从字符串转换,您需要使用静态Enum.Parse()
方法,该方法需要3个参数。第一个是您要考虑的枚举类型。语法是关键字typeof()
,后跟括号中枚举类的名称。第二个参数是要转换的字符串,第三个参数是bool
,表示在进行转换时是否应忽略大小写。
最后,请注意Enum.Parse()
实际上返回了一个对象引用,这意味着您需要将其显式转换为所需的枚举类型(string
,int
等)。
谢谢。
答案 5 :(得分:-2)
替代解决方案可以是:
baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE;
uint value = (uint)hKeyLocalMachine;
或者只是:
uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;