如何从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( string
, int
等)。
谢谢。
备用解决scheme可以是:
baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE; uint value = (uint)hKeyLocalMachine;
要不就:
uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;