[C#] Enum & ToString() [Résolu]

scoubidou944 728 Messages postés mardi 22 avril 2003Date d'inscription 19 janvier 2017 Dernière intervention - 19 avril 2005 à 18:57 - Dernière réponse : cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 21 avril 2005 à 00:23
3
Merci
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#

Merci cs_coq 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_coq
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 19 avril 2005 à 19:37
0
Merci
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
Commenter la réponse de MorpionMx
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 20 avril 2005 à 12:44
0
Merci
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 :)
Commenter la réponse de sebseb42
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 20 avril 2005 à 12:47
0
Merci
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.
Commenter la réponse de sebseb42
scoubidou944 728 Messages postés mardi 22 avril 2003Date d'inscription 19 janvier 2017 Dernière intervention - 20 avril 2005 à 13:02
0
Merci
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
Commenter la réponse de scoubidou944
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 20 avril 2005 à 13:36
0
Merci
les chaines en dur sont stockées dans une table adressé, dans le binaire
Commenter la réponse de sebseb42
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 21 avril 2005 à 09:04
0
Merci
Ces méthodes de barbares

Mx
Commenter la réponse de MorpionMx
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 21 avril 2005 à 11:03
0
Merci
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)
Commenter la réponse de sebseb42
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 21 avril 2005 à 11:08
0
Merci
Je crois que c'est le copier/coller qui garde la couleur.

Mx
Commenter la réponse de MorpionMx
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 21 avril 2005 à 11:08
0
Merci
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#
Commenter la réponse de cs_coq
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 21 avril 2005 à 11:10
0
Merci
D'ailleurs ta source qui modifie le presse papier est tres utile coq ^^

Mx
Commenter la réponse de MorpionMx
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 21 avril 2005 à 11:17
0
Merci
Ah cool y'en a au moins un qui s'en sert lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 21 avril 2005 à 11:45
0
Merci
merci pour vos reponses :)
Commenter la réponse de sebseb42
scoubidou944 728 Messages postés mardi 22 avril 2003Date d'inscription 19 janvier 2017 Dernière intervention - 21 avril 2005 à 13:52
0
Merci
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
Commenter la réponse de scoubidou944
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 21 avril 2005 à 14:28
0
Merci
coq au vin ?
c'etait vraiment encore plus facile ^^
Commenter la réponse de sebseb42
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 21 avril 2005 à 15:12
0
Merci
lol
z'en avez mit du temps quand même à me la sortir celle là

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.