J'ai une énumération:
public enum MyColours
{
Red,
Green,
Blue,
Yellow,
Fuchsia,
Aqua,
Orange
}
et j'ai une chaîne:
string colour = "Red";
Je souhaite pouvoir revenir:
MyColours.Red
de:
public MyColours GetColour(string colour)
Jusqu'à présent, j'ai:
public MyColours GetColours(string colour)
{
string[] colours = Enum.GetNames(typeof(MyColours));
int[] values = Enum.GetValues(typeof(MyColours));
int i;
for(int i = 0; i < colours.Length; i++)
{
if(colour.Equals(colours[i], StringComparison.Ordinal)
break;
}
int value = values[i];
// I know all the information about the matched enumeration
// but how do i convert this information into returning a
// MyColour enumeration?
}
Comme vous pouvez le voir, je suis un peu coincé. Y a-t-il de toute façon pour sélectionner un énumérateur par valeur. Quelque chose comme:
MyColour(2)
entraînerait
MyColour.Green
c#
string
enumeration
Matt Clarkson
la source
la source
Réponses:
consultez System.Enum.Parse:
la source
Vous pouvez convertir l'int en une énumération
Il existe également l'option Enum.Parse
la source
Compte tenu des modifications les plus récentes et les plus importantes apportées à .NET (+ Core) et C # 7, voici la meilleure solution:
La variable de couleur peut être utilisée dans le cadre de Enum.TryParse
la source
Tout ce dont vous avez besoin est Enum.Parse .
la source
J'ai marqué la réponse d'OregonGhost +1, puis j'ai essayé d'utiliser l'itération et j'ai réalisé que ce n'était pas tout à fait correct car Enum.GetNames renvoie des chaînes. Vous voulez Enum.GetValues:
la source
Vous pouvez utiliser
Enum.Parse
pour obtenir une valeur d'énumération à partir du nom. Vous pouvez parcourir toutes les valeurs avecEnum.GetNames
, et vous pouvez simplement convertir un int en une énumération pour obtenir la valeur enum de la valeur int.Comme ceci, par exemple:
ou:
Ce dernier lancera une ArgumentException si la valeur n'est pas trouvée, vous voudrez peut-être l'attraper dans la fonction et renvoyer la valeur par défaut.
la source
la source
Parse
méthode générique .Comme mentionné dans les réponses précédentes, vous pouvez convertir directement le type de données sous-jacent (int -> type enum) ou analyser (chaîne -> type enum).
mais attention - il n'y a pas de .TryParse pour les énumérations, vous aurez donc besoin d'un bloc try / catch autour de l'analyse pour détecter les échecs.
la source
la source
Une chose qui pourrait vous être utile (en plus des réponses déjà valides / bonnes fournies jusqu'à présent) est l'idée StringEnum fournie ici
Avec cela, vous pouvez définir vos énumérations en tant que classes (les exemples sont dans vb.net):
Et maintenant, vous pouvez utiliser la classe this comme vous utiliseriez une énumération: eAuthenticationMethod.WindowsAuthentication et ce serait essentiellement comme attribuer au ' W ' la valeur logique de WindowsAuthentication (à l'intérieur de l'énumération) et si vous deviez afficher cette valeur à partir d'une propriété fenêtre (ou autre chose qui utilise la propriété System.ComponentModel.Description), vous obtiendrez " Utiliser l'authentification Windows ».
J'utilise cela depuis longtemps maintenant et cela rend le code plus clair dans l'intention.
la source
la source
Vous pouvez également consulter certaines des suggestions de ce billet de blog: Mon nouveau petit ami, Enum <T>
Le message décrit un moyen de créer une classe d'assistance générique très simple qui vous permet d'éviter la vilaine syntaxe de conversion inhérente à
Enum.Parse
- au lieu de cela, vous finissez par écrire quelque chose comme ça dans votre code:Ou consultez certains des commentaires dans le même article qui parlent de l'utilisation d'une méthode d'extension pour obtenir des résultats similaires.
la source