[C#] Des Enum pour des string

Hello les gens,

Alors voilà, je me posais la question hier alors même que je développais un projet framework qui regroupait grosso modo toutes les méthodes génériques et nécessaires pour le projet en cours et pour les futurs projets. Et j’en étais arrivé à faire des enum de string. Or le compilo me tic que les enum ne peuvent seulement traiter des nombres.

Maintenant, je veux faire la même chose des enum mais pour des strings, c’est notamment plus simple lorsque les valeurs sont déjà pas explicites du tout et qu’il n’y a pas moyen de les renommer (ex: les attributs d’Active Directory). Ma demande serait de savoir s’il existe une méthode/variable natif sous le framework .net 2.0/3.0/3.5 qui me permettrait de répondre à ce genre de besoin ?

Si oui, quel est elle ? sinon, tant pis, je devrais me contenter de faire une classe et une méthode ou bien de faire une classe comprenant unique des propriétés en static readonly (et ca, je trouve pas top).

Hummm et une classe static avec des proprietes de type string avec juste le get c’est quoi le probleme? Une enum c’est des value type, si tu veux des references type, il te faut une classe.

Disons que je veux simplement avoir le moins de code possible. Parce que faire uniquement des gets ca revient à taper tout plein d’accesseur et donc plus de code à saisir ^^. Je sais chui fainéant mais bon, si on ne peut pas faire autrement, tant pis.

Les enum C# ca ne marche pas comme en Java ? Car en Java, on peut toujours utiliser MonEnum.MA_VALEUR.name() pour récupérer la chaine “MA_VALEUR” ou utiliser un truc de ce genre pour associer une chaine de caractère à un élément de l’énumération :

[code]public enum MonEnum {
VALUE1(“Ma Chaine”), VALUE2(“Une autre chaine”);

private String maChaine;

private MonEnum(String maChaine) {
this.maChaine = maChaine;
}

public String getMaChaine() {
return this.maChaine;
}
}[/code]

ce qui correspond à l’ancienne syntaxe Java 1.4 :

[code]public class MonEnum {
public static final MonEnum VALUE1 = new MonEnum(“Ma Chaine”);
public static final MonEnum VALUE2 = new MonEnum(“Une autre chaine”);

private String maChaine;

private MonEnum(String maChaine) {
this.maChaine = maChaine;
}

public String getMaChaine() {
return this.maChaine;
}
}[/code]

Erf, en fait le code en C# que je veux utiliser, ressemble plutot à ca :

(pour la structure standard d’un enum, virez les double quotes et remplacez les valeurs en string par des valeurs en int/long/double/float).

Voilà, or ton code implique de développer une class Enum chose que je veux éviter s’il existe un enum en natif.

using System;

namespace MyCompany.Common
{
public static class ADConstants
{
public static readonly string NameAttribute = “NAME”;
}
}

Ca t’évite les accesseurs, et tu es certain que les valuers ne seront pas écrasées. Au passage, j’imagine que ca doit pas être complètement dégueux même pour les Aïatolas du beau code (dont je fais un peu partie en fait), vu que c’est comme ca que sont déclarées les DependencyProperty WPF / WF ^^.

[quote=“girafologue, post:6, topic: 47365”]using System;

namespace MyCompany.Common
{
public static class ADConstants
{
public static readonly string NameAttribute = “NAME”;
}
}[/quote]

C’est ce que je fais actuellement. Mais perso, j’aime pas. Mais bon vu que je n’ai pas d’autre solution je le laisse comme ça.

Y’a aucune raison de pas aimer, c’est des constantes de chaine…

Et à ta place je ne mettrai pas de static readonly mais simplement des public const.

C’est tout pourri les enums en .NET finalement, ce n’est même pas de vrais classes :crying: .

Pour argumenter un peu plus :slight_smile: je suis fan des enums Java qui permettent d’utiliser des objets avec propriétés et méthodes, c’est vrai qu’en se limitant à une association Clé → valeur numérique, les possibilités sont beaucoup plus restreintes. On ne peux même pas comparer enum Java5 et enum .NET, ça n’a rien à voir.

Et pourquoi pas un .Tostring sur la valeur de ton enum ?

Non mais c’est ultra zarb de melanger, une enum c’est un value type, pas un objet, faire des enum de references et se retrouver avec des trucs qui sont pas alloues sur la pile c’est … special.