[C#] Enum & ToString()

Résolu
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 19 avril 2005 à 18:57
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 21 avril 2005 à 15:12
Lorsque l'on a un enum,
on peut avoir un code :

MyEnum.MyElement.ToString ()

Oki, ca marche mais si par exemple on voulait redéfinir le résultat pour obtenir une chaîne différente (par exemple lors d'une localisation) on fait comment à part passer par une bonne grosse table de conversion ?

----------------------------
C++ forever
C# amateur
A voir également:

16 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 avril 2005 à 00:23
Salut,

Sinon tu peux aussi utiliser la reflection en définissant un attribut Description sur les champs que tu veux , avec une petite méthode "utilitaire" qui te servira pour tout tes enums :


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;
}
}

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
19 avril 2005 à 19:37
Une enumération sert a avoir une valeur constante par rapport a une chaine, pas l'inverse !



Donc a moins de passer par des ressources afin de mettre en oeuvre la localisation (c'est a ca que ca sert), je ne vois pas ...


Mx
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
20 avril 2005 à 12:44
ou sinon tu utilise une structure dans ce style la

public struct machin
{
public string truc = "une chaine";
public string bignou = "une autre chaine";
...
}

ou sinon si tu veux faire un truc plus violent, tu peux creer une structure d'objet, avec un objet comme ca :

public class MySpecialEnum
{
public readonly string Value;
public readonly int ID;

public MySpecialEnum(int id, string s)
{
Value = s;
ID = id;
}

public static bool operator==(MySpecialEnum a, MySpecialEnum b)
{
return (a.ID == b.ID);
}

public override string ToString()
{
return (Value);
}
}

et ensuite ta structure :

public struct MyEnums
{
public MySpecialEnum truc = new MySpecialEnum(1, "une chaine avec truc ecrit dedans");
public MySpecialEnum machin = new MySpecialEnum(2, "une chaine qui dit machin");
public MySpecialEnum arf = new MySpecialEnum(3, "arf arf!!");
}

et ensuite admettons que tu es une instance de ta structure MyEnums qui s'appel myen, tu peut faire

if (my_special_enum_object == myen.truc)
{
// ici c'est l'operateur == qui se charge du boulot, catte methode permet de comparer des int et non pas de faire implicitement des string.Compare(), qui sont beaucoup plus couteux
}

et si tu as besoin d'afficher :

txtAffiche.Text = myen.truc;
// en theorie ceci devrais implicitement appeler la fonction ToString() qu'on a redefini, et sinon au pire myen.truc.ToString();

voila, j'espere que ca peut t'aider un peu :)
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
20 avril 2005 à 12:47
ah oui j'oubliais, tu peux aussi ne pas te preoccuper des ID a la creation des objets MySpecialEnum en mettant une variable static auto-incremental au sein de la classe.

ceci dit, la methode que j'ai mis plus au te permet d'avoir un control precis sur tes ID, car tu peut vouloir quelques fois avec deux objets different avec les memes ID.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
20 avril 2005 à 13:02
ca reste violent comme méthode, je me demande ou le compilo met le code
qu'il génère pour générer ses strings d'enum. enfin bref, pour le
moment, je sens que le switch va rester comme ca et au pire, je fais un
hashtable.

----------------------------
C++ forever
C# amateur
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
20 avril 2005 à 13:36
les chaines en dur sont stockées dans une table adressé, dans le binaire
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
21 avril 2005 à 09:04
Ces méthodes de barbares

Mx
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
21 avril 2005 à 11:03
une petite question qui n'as rien a voir avec le sujet mais qui peut toutefois interesser du monde, pour avoir la coloration syntaxique, est-ce que tu fait ca a la pogne ou est-ce qu'il y a une balise particuliere qui explique a une moulinette qu'on veut qu'elle le fasse tout seul pour nous ?

ou est-ce que tu code dans VS et le copier/coller garde la couleur ? (je suis pas sur de ca)
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
21 avril 2005 à 11:08
Je crois que c'est le copier/coller qui garde la couleur.

Mx
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 avril 2005 à 11:08
Si, le c/c depuis VS se fait en RTF avec conservation des couleurs quand on colle dans la FreeTexBox :-)
J'ai juste un bout de code qui remplace les \par par des \line dans le presse papier, sinon il y a une ligne passée entre chaque ligne quand on colle dans la FTB.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
21 avril 2005 à 11:10
D'ailleurs ta source qui modifie le presse papier est tres utile coq ^^

Mx
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 avril 2005 à 11:17
Ah cool y'en a au moins un qui s'en sert lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
21 avril 2005 à 11:45
merci pour vos reponses :)
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
21 avril 2005 à 13:52
y'a pas à dire, le Coq, c'est vraiment l'amis de tout le monde.

Allez, je te nomme au titre d'Ingénieur Génial Divin ;p

Vin.

non dsl c'était facile comme jeu de mot

----------------------------
C++ forever
C# amateur
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
21 avril 2005 à 14:28
coq au vin ?
c'etait vraiment encore plus facile ^^
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 avril 2005 à 15:12
lol
z'en avez mit du temps quand même à me la sortir celle là

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous