Bonjour,

Je cherche à créer un liste d'énumération composé de strings. Ce n'est pas possible à faire tel quel en C#. L'écriture suivante est fausse :

Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
public enum Test
        {
            Test1 = "Ma valeur de test #1",
            Test2 = "Ma valeur de test #2",
            Test3 = "Ma valeur de test #3"
        }

Dommage. J'ai donc cherché une parade et j'ai trouvé pas mal de solutions. Chacun proposant sa propre implémentation de l'enum string. Tout le monde criant qu'il y a plein de mauvaises implémentation qui traînent sur le web et que c'est bien le sienne qui est la seule vrai. Je ne sais plus quoi croire. Vous trouverez des exemples sur [ame="http://www.google.be/search?q=string+enumeration+C%23&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a"]Google[/ame]. J'ai bien aimé la solution toute simple qui consiste à utiliser un Dictionary en parallèle à son énumération.
Je copie la solution de Coq en question ici :

Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enum Test
{
[Description("Ma valeur de test #1")]
Test1,
[Description("Ma valeur de test #2")]
Test2,
Test3,
}
 
private string GetEnumValueDescription(Enum enumValue)
{
FieldInfo fInfo = enumValue.GetType().GetField(enumValue.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
 
if ( attributes.Length == 0)
{
return enumValue.ToString();
}
else
{
return attributes[0].Description;
}
}

Tout simple, efficace, ça me semble parfait. Mais cette solution m'intrigue. Je me pose plusieurs questions que voici :

  1. Pourquoi cette solution ne fait elle pas l'unanimité ?
  2. La méthode utilise la réflexion. C'est pas déconseillé question performances ?
  3. Qu'est ce qu'un attribut exactement ?
  4. Et enfin, en Java à titre de comparaison, n'est il pas possible de créer des enum string ?


Merci d'avance pour vos lumières.