Как получить значение перечисления из строки в С#?
У меня есть перечисление:
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
на основе перечисления?
Ответы
Ответ 1
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")
Ответ 2
Используя Enum.TryParse, вам не нужна обработка исключений:
baseKey e;
if ( Enum.TryParse(s, out e) )
{
...
}
Ответ 3
var value = (uint) Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE");
Ответ 4
С некоторой обработкой ошибок...
uint key = 0;
string s = "HKEY_LOCAL_MACHINE";
try
{
key = (uint)Enum.Parse(typeof(baseKey), s);
}
catch(ArgumentException)
{
//unknown string or s is null
}
Ответ 5
var value = (uint)Enum.Parse(typeof(basekey), "HKEY_LOCAL_MACHINE", true);
Этот фрагмент кода иллюстрирует получение значения перечисления из строки. Чтобы преобразовать из строки, вам нужно использовать статический метод Enum.Parse()
, который принимает 3 параметра. Первый - это тип перечисления, который вы хотите рассмотреть. Синтаксис - это ключевое слово typeof()
, за которым следует имя класса enum в скобках. Второй параметр - это строка, которая должна быть преобразована, а третий параметр - bool
, указывающий, следует ли игнорировать регистр при выполнении преобразования.
Наконец, обратите внимание, что Enum.Parse()
фактически возвращает ссылку на объект, это означает, что вам нужно явно преобразовать это в нужный тип перечисления (string
, int
и т.д.).
Спасибо.
Ответ 6
Альтернативное решение может быть:
baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE;
uint value = (uint)hKeyLocalMachine;
Или просто:
uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;