C #의 문자열에서 열거 형 값을 얻는 방법은 무엇입니까?


102

열거 형이 있습니다.

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있습니까?

답변:


173
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")

1
나는 항상 왜 Enum.Parse에 대한 일반적인 오버로드가 없는지 궁금합니다. 기한이 오래되었습니다.
Falanwe 2015

3
이제 일반 Enum.TryParse <TEnum> () 메서드가 있습니다.
Eugene Maksimov

27

Enum.TryParse를 사용하면 예외 처리가 필요하지 않습니다.

baseKey e;

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

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

16

오류 처리와 함께 ...

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

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

이 코드 조각은 문자열에서 열거 형 값을 얻는 방법을 보여줍니다. 문자열에서 변환하려면 Enum.Parse()3 개의 매개 변수 를 사용하는 정적 메서드 를 사용해야합니다 . 첫 번째는 고려할 열거 형 유형입니다. 구문은 키워드 typeof()다음에 대괄호로 묶인 열거 형 클래스 이름입니다. 두 번째 매개 변수는 변환 할 문자열이고 세 번째 매개 변수는 bool변환을 수행하는 동안 대소 문자를 무시할지 여부를 나타냅니다.

마지막으로, 참고 Enum.Parse()실제로는 객체 참조, 명시 적으로 요구되는 열거 형 (이 변환해야한다는 것을 의미 반환 string, int등).

감사합니다.


-2

대체 솔루션은 다음과 같습니다.

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

아니면 그냥 :

uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;

3
문자열을 열거 형 값으로 정확히 변환하는 방법은 무엇입니까?
Falanwe 2015

열거 형은 이름과 값의 두 가지 구성 요소로 구성됩니다. 이름이 "HKEY_LOCAL_MACHINE"이고 값이 "0x80000002"라고 가정 해 보겠습니다. Enum.Parse () 메서드는 enum 멤버를 uint로 캐스트하고 값-2147483650을 얻을 수 있기 때문에이 경우 쓸모가 없습니다. Enum.Parse ()는 물론 동일한 결과를 제공하지만 문자열을 캐스트 할 수있는 매개 변수로 하드 코딩하는 대신 작업중인 열거 형 변수를 직접.
George Findulov

4
"HKEY_LOCAL_MACHINE"OP가 요청 했듯이 문자열 을 값으로 변환하지 않고 기호 HKEY_LOCAL_MACHINE를 값으로 변환했습니다 . 격렬하게 다른 짐승.
Falanwe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.