Как получить значение перечисления из строки в 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 на основе перечислимого?
6 ответов:
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")
С Помощью Перечисления.TryParse вам не нужна обработка исключений:
baseKey e; if ( Enum.TryParse(s, out e) ) { ... }
С некоторой обработкой ошибок...
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);этот фрагмент кода иллюстрирует получение значения enum из строки. Для преобразования из строки, вы должны использовать статический!--1--> метод, который принимает 3 параметра. Первый-это тип перечисления, который вы хотите рассмотреть. Синтаксис-это ключевое слово
typeof()за которым следует имя класса перечисления в скобках. Второй параметр - это строка, подлежащая преобразованию, а третий параметр-этоbool, указывающее, следует ли игнорировать регистр при выполнении преобразования.наконец, обратите внимание, что
Enum.Parse()фактически возвращает ссылку на объект, что означает, что вам нужно явно преобразовать его в требуемый тип перечисления (string,intetc).спасибо.
альтернативным решением может быть:
baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE; uint value = (uint)hKeyLocalMachine;или так:
uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;
Comments