如何从 C # 中的字符串中获取枚举值?

我有一个枚举:

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

118842 次浏览
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")
var value = (uint) Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE");

通过一些错误处理..。

uint key = 0;
string s = "HKEY_LOCAL_MACHINE";
try
{
key = (uint)Enum.Parse(typeof(baseKey), s);
}
catch(ArgumentException)
{
//unknown string or s is null
}

使用 Enum.TryParse 不需要异常处理:

baseKey e;


if ( Enum.TryParse(s, out e) )
{
...
}

另一种解决方案可以是:

baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE;
uint value = (uint)hKeyLocalMachine;

或者只是:

uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;
var value = (uint)Enum.Parse(typeof(basekey), "HKEY_LOCAL_MACHINE", true);

此代码片段演示如何从字符串获取枚举值。要从字符串转换,需要使用静态 Enum.Parse()方法,该方法接受3个参数。第一个是要考虑的枚举类型。语法是关键字 typeof(),后跟括号中的枚举类的名称。第二个参数是要转换的字符串,第三个参数是 bool,它指示在进行转换时是否应该忽略 case。

最后,请注意,Enum.Parse()实际上返回一个对象引用,这意味着您需要显式地将其转换为所需的枚举类型(stringint等)。

谢谢你。