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?
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")
Avec Enum.TryParse, vous n’avez pas besoin du traitement des exceptions:
baseKey e;
if ( Enum.TryParse(s, out e) )
{
...
}
var value = (uint) Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE");
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
}
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.