2009-10-16 12 views

Odpowiedz

143
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 */ } 

Przed .NET 4.5, trzeba było wykonać następujące czynności, które są bardziej podatne na błędy i zgłasza wyjątek, gdy nieprawidłowy ciąg jest przekazywany:

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

Zawsze się zastanawiam, dlaczego Enum.Parse wciąż nie ma generycznego przeciążenia. To już dawno. – Falanwe

+2

Teraz dostępna jest ogólna metoda Enum.TryParse (). –

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

Z pewnym obsługi błędów ...

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

Korzystanie Enum.TryParse nie potrzebują obsługi wyjątków:

baseKey e; 

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

rozwiązanie alternatywne może być:

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

Lub po prostu:

uint value = (uint)baseKey.HKEY_LOCAL_MACHINE; 
+3

Jak dokładnie przekształca ciąg w wartość wyliczenia? – Falanwe

+0

Wyliczenia składają się z dwóch komponentów: nazwy i wartości. Powiedzmy, że nazwa to "HKEY_LOCAL_MACHINE", a wartość to "0x80000002". Metoda Enum.Parse() jest w tym przypadku bezużyteczna, ponieważ można wyrzucić element enum do uint i uzyskać wartość - 2147483650. Enum.Parse() oczywiście daje taki sam wynik, ale zamiast kodowania ciąg znaków jako parametr można rzutować bezpośrednio zmienna enum, z którą pracujesz. –

+3

Nie konwertowałeś ciągu '" HKEY_LOCAL_MACHINE "' na wartość, zgodnie z zapytaniem OP, przekonwertowałeś symbol 'HKEY_LOCAL_MACHINE' na wartość. Dziwnie różne bestie. – Falanwe

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

Ten fragment kodu ilustruje uzyskanie wartości enum z ciągiem. Aby przekonwertować ciąg, należy użyć metody statycznej Enum.Parse(), która pobiera 3 parametry. Pierwszy to rodzaj wyliczenia, który chcesz wziąć pod uwagę. Składnia to słowo kluczowe typeof(), po którym następuje nazwa klasy wyliczeniowej w nawiasach. Drugi parametr jest ciągiem do przekonwertowania, a trzeci parametr to bool wskazujący, czy należy zignorować przypadek podczas wykonywania konwersji.

Na koniec zwróć uwagę, że Enum.Parse() faktycznie zwraca odwołanie do obiektu, co oznacza, że ​​musisz jawnie przekonwertować to na wymagany typ wyliczeniowy (string, int itd.).

Dziękuję.

Powiązane problemy