190 votes

Rechercher une chaîne dans Enum et retourner l'énum

J'ai une énumération:

 public enum MyColours
{
    Red,
    Green,
    Blue,
    Yellow,
    Fuchsia,
    Aqua,
    Orange
}
 

et j'ai une ficelle:

 string colour = "Red";
 

Je veux pouvoir revenir:

 MyColours.Red
 

de:

 public MyColours GetColour(string colour)
 

Jusqu'ici 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 constater, je suis un peu coincé. Est-il possible de sélectionner et énumérateur par valeur. Quelque chose comme:

 MyColour(2) 
 

aboutirait à

 MyColour.Green
 

426voto

JMarsch Points 9814

Découvrez System.Enum.Parse:



enum Colors {Red, Green, Blue}

// your code:
Colors color = (Colors)System.Enum.Parse(typeof(Colors), "Green");
 

23voto

Guvante Points 10338

Vous pouvez jeter l'int en un enum

 (MyColour)2
 

Il y a aussi l'option d'Enum.Parse

 (MyColour)Enum.Parse(typeof(MyColour), "Red")
 

5voto

Bruno Brant Points 3590

Tout ce dont vous avez besoin est Enum.Parse .

2voto

Colin Points 5006

J'ai marqué la réponse +1 d'OregonGhost, puis j'ai essayé d'utiliser l'itération et je me suis rendu compte que ce n'était pas tout à fait correct car Enum.GetNames renvoie des chaînes. Vous voulez Enum.GetValues:

 public MyColours GetColours(string colour)
{  
   foreach (MyColours mc in Enum.GetValues(typeof(MyColours))) 
   if (mc.ToString() == surveySystem) 
      return mc;

   return MyColors.Default;
}
 

1voto

OregonGhost Points 16615

Vous pouvez utiliser Enum.Parse pour obtenir une valeur enum à partir du nom. Vous pouvez parcourir toutes les valeurs avec Enum.GetNames et vous pouvez simplement convertir un int en un enum pour obtenir la valeur enum de la valeur int.

Comme ceci, par exemple:

 public MyColours GetColours(string colour)
{
    foreach (MyColours mc in Enum.GetNames(typeof(MyColours))) {
        if (mc.ToString().Contains(colour)) {
            return mc;
        }
    }
    return MyColours.Red; // Default value
}
 

ou:

 public MyColours GetColours(string colour)
{
    return (MyColours)Enum.Parse(typeof(MyColours), colour, true); // true = ignoreCase
}
 

Ce dernier lève une exception ArgumentException si la valeur n'est pas trouvée. Vous voudrez peut-être l'attraper à l'intérieur de la fonction et renvoyer la valeur par défaut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X