web-dev-qa-db-fra.com

Comment obtenir une valeur enum d'une chaîne en C #?

J'ai un enum:

public enum baseKey : uint
{  
    HKEY_CLASSES_ROOT = 0x80000000,
    HKEY_CURRENT_USER = 0x80000001,
    HKEY_LOCAL_MACHINE = 0x80000002,
    HKEY_USERS = 0x80000003,
    HKEY_CURRENT_CONFIG = 0x80000005
}

Comment puis-je, étant donné la chaîne HKEY_LOCAL_MACHINE, obtenez une valeur 0x80000002 basé sur l'énum?

94
Luiz Costa
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 */ }

Avant .NET 4.5, vous deviez effectuer les opérations suivantes, qui sont plus sujettes aux erreurs et lève une exception lorsqu'une chaîne non valide est transmise:

(uint)Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE")
161
Mehrdad Afshari

Avec Enum.TryParse, vous n’avez pas besoin du traitement des exceptions:

baseKey e;

if ( Enum.TryParse(s, out e) )
{
 ...
}
27
Nigel
var value = (uint) Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE");  
20
Joseph

Avec quelques erreurs de gestion ...

uint key = 0;
string s = "HKEY_LOCAL_MACHINE";
try
{
   key = (uint)Enum.Parse(typeof(baseKey), s);
}
catch(ArgumentException)
{
   //unknown string or s is null
}
16
Frank Bollack
var value = (uint)Enum.Parse(typeof(basekey), "HKEY_LOCAL_MACHINE", true);

Cet extrait de code illustre l'obtention d'une valeur enum à partir d'une chaîne. Pour convertir une chaîne, vous devez utiliser la méthode static Enum.Parse(), qui prend 3 paramètres. Le premier est le type d’énum que vous souhaitez prendre en compte. La syntaxe est le mot clé typeof() suivi du nom de la classe enum entre parenthèses. Le deuxième paramètre est la chaîne à convertir et le troisième paramètre est un bool indiquant si vous devez ignorer la casse lors de la conversion.

Enfin, notez que Enum.Parse() renvoie en fait une référence d'objet, ce qui signifie que vous devez explicitement la convertir en type d'enum requis (string, int etc.).

Merci.

1
Rahul Bhat