Bonjour à tous,
Je voudrai créer une enumeration optionEnum qui contienne les strings
"option1", "option2", "option3", "option4"
seulement enum de C# n'est valable que pour des nombres.
quelqu'un aurait deja resolu ce probleme ?
merci
 Enum de strings
 Enum de strings
				
				
						
							
							
						
						
				Bonjour à tous,
Je voudrai créer une enumeration optionEnum qui contienne les strings
"option1", "option2", "option3", "option4"
seulement enum de C# n'est valable que pour des nombres.
quelqu'un aurait deja resolu ce probleme ?
merci
 
 
				
				
						
						
				pas du tout. une énum, c'est des valeurs, qui ont une clé de type int, mais ca reste des valeurs derrière, et à qui tu peux mettre l'attribut Description pour utiliser/afficher une chaine particulière
donc tu peux utiliser çà:
ca marche à merveille pour s'assurer pour avoir un affichage particulier, et des clés uniques, pour s'assurer de l'unicité de la chose
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ou alors, tu utilises des classes static si c'est que pour ce l'affichage
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
 
 
				
				
						
						
				tu peux mettre l'attribut Description pour utiliser/afficher une chaine particulièreCe serait parfait si HistoryStatus.NewDemandEmap.ToString() donnait "New Demand" au lieu de "NewDemandEmap" ?
Est-ce le cas ?
 
 
				
				
						
						
				Merci pour ta reponse,
les deux solutions ont l'air de bien fonctionner,
seulement je n'arrive pas à integrer mon enumeration dans les constructeurs de ma classe,
je voudrais avoir la chose suivante:
est ce une bonne idée de faire une enumeration ou une classe statique tout compte fait ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
merci encore
 
 
				
				
						
						
				non le toString() ne te donne pas la valeur de l'attribut mais on peut le faire avec une petite méthode et de la réflexion
Maintenant, ca peut même se faire évoluer pour taper dans des ressources afin de gérer la localisation, tout en gardant l'avantage des enums. (même si je l'accorde, ca fait beaucoup de bidouillage autour)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
ca dépend ce que tu veux faire. L'enuméation te servira surtout si tu veux récupérer les valeurs (nombres) pour insérer en base. si c'est pour binder sur une drop down, c'est aussi mieux, bien que la réflexion sur ta classe soit possible.est ce une bonne idée de faire une enumeration ou une classe statique tout compte fait ?
si c'est juste pour toi, t'aider dans le code, et limiter les valeurs possibles quand tu écris ton code alors la classe statique peut être plus simple à mettre en place (peut être mixé avec des constantes)
donc la réponse à ta question dépend de ce que tu veux faire
 
 
				
				
						
						
				Et pourquoi pas simplement déclarer un type :
Tu as besoin que ca s'écrive plus joliment ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
Et pour faire plus "objet" tu peux créer une classe avec ton enum, et surcharger ta fonction ToString() qui fera la même chose que DisplayEnum();
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
 
 
				
				
						
						
				sauf que ton idée, ca veut dire qu'à chaque fois que tu édites ton énum, tu dois éditer ta méthode. Supposons que le cas se reproduise plein de fois dans le projet, ca veut dire que t'as autant de méthodes que d'objets, donc tu perds tout idée de généricité, et ta logique, elle est découplée en deux endroits (=moindre visibilité, possibilité de faire une erreur, si tu rénomme un champ de l'enum, tu dois corriger le switch, etc.), ton énum et le résultant (DisplayEnum).
cela parait donc plus simple mais dès la seconde utilisation de ce cas de figure ou dès la première modification du contexte (par exemple un équivalent en base ou autre), il faudra faire des modifs de code à plusieurs endroits et donc on y perd en totalement en productivité et donc la solution apparait de suite moins idéale
 
 
				
				
						
						
				En effet, c'était le "pourquoi" de ma dernière phrase.
D'ailleurs, on pourrait pas faire avec un :
Remarque ca résout toujours pas le problème de pouvoir en faire quelquechose de générique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
 
 
				
				
						
						
				Sinon, il y a aussi le tableau
Mais de toute façon dans quelques temps tu voudras mettre tout ça dans les ressources.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
oui ! en même temps, s'il ajoute une valeur c'est qu'il y a une règle de gestion sinon ce sont des resources et il n'a même pas besoin d'enum. Et en bon dév on commence par modifier cette fonction pour pouvoir l'afficher (sinon on a pas besoin du libellé) et pouvoir tester notre belle implémentation du cas.
 
 
				
				
						
						
				Merci à tous
mon code devient le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
 
				
				
						
						
				Il y a une petite subtilité que je me permet de vous faire part:
lorsque je crée une nouvelle instance de ma classe machine:
cela me va,
Code : Sélectionner tout - Visualiser dans une fenêtre à part Machine1 = new Machine(serialport1, machine.optionEnum.option1)
par contre:
est possible à instancier,
Code : Sélectionner tout - Visualiser dans une fenêtre à part Machine1 = new Machine(serialport1, machine.optionEnum.option1, machine.optionEnum.option1)
j'aurai 2fois l'option 1 et cela ne me convient pas vraiment
Avez vous des suggestions?
J'espere que c'etait assez clair
merci pour votre aide
 
 
				
				
						
						
				pourquoi tu mets deux fois option1 si ca te convient pas? :p
sinon passe un seul deuxieme argument, un dictionnaire de paramètre par exemple. Et puis toi, tu le "nettoies" dans ton constructeur pour éviter les bêtises de celui qui utilise ta classe. et surtout cette solution permet de passer N arguments, si jamais t'as besoin de faire évoluer là chose.
 
 
				
				
						
						
							
						
				flags si les valeurs le permettent
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
Partager