如何从C#中的string获得枚举值?

我有一个枚举:

public enum baseKey : uint { HKEY_CLASSES_ROOT = 0x80000000, HKEY_CURRENT_USER = 0x80000001, HKEY_LOCAL_MACHINE = 0x80000002, HKEY_USERS = 0x80000003, HKEY_CURRENT_CONFIG = 0x80000005 } 

给定stringHKEY_LOCAL_MACHINE ,我怎么能得到一个值为0x80000002基于枚举?

 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之前,您必须执行以下操作,这更容易出错,并在传递无效string时引发exception:

 (uint)Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE") 

使用Enum.TryParse你不需要exception处理:

 baseKey e; if ( Enum.TryParse(s, out e) ) { ... } 
 var value = (uint) Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE"); 

随着一些error handling…

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

这段代码演示了从一个string中获取一个枚举值。 要从string转换,您需要使用静态Enum.Parse()方法,该方法需要3个参数。 首先是你想要考虑的枚举types。 语法是关键字typeof()后面跟着括号中的枚举类的名称。 第二个参数是要转换的string,第三个参数是一个bool表示在转换过程中是否应该忽略大小写。

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

谢谢。

备用解决scheme可以是:

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

要不就:

 uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;