LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention 9 septembre 2010
-
29 mai 2009 à 12:22
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 2015
-
4 janv. 2010 à 12:06
Bonjour à tous!
J'ai un petit soucis avec une énumération (cf ci-dessous).
[FlagsAttribute]
public enum fa { LI 1, PE 2, DI = 4, HO = 8 };
Je suis obligé de mettre un FlagsAttribute sur mon énumération car des fois je ne veux que certaines valeurs dans cette énumération.
Mais maitenant je voudrais récupérer le rang de l'énumération c'est à dire que pour HO j'obtiendrai 4 (ou 3 si on commence à compter à partir de 0). Mais vu que j'ai mis les flagsAttribute j'obtient 8 au lieu de 4 (ou 3).
Quelqu'un aurait-il un moyen pour je puisse avancer? Merci beaucoup.
LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention 9 septembre 20105 5 juin 2009 à 13:43
Je te remercie malgrès que j'étais au courant pour ça...Comme solution j'ai fait la même énumération sauf qu'elle ne se base pas sur les bases de 2. Comme ça m'évite d'avoir des traitements trop complexes du genre /2 ou je ne sais quoi... Merci quand même sebmafate.
thedarkkillerz
Messages postés18Date d'inscriptionsamedi 3 juillet 2004StatutMembreDernière intervention21 juin 2010 3 janv. 2010 à 16:47
Salut,
Un truc intéressant avec les énumérations en puissances de 2 est que tu peux travailler en binaire.
Par exemple:
fa test = new fa(); // A ce stade, test vaut 0
test = LI; //test vaut 1
test |PE; // test vaut 3 car on a "fusionné" les bits avec le "ou" binaire, soit 00000001 | 00000010 00000011
if((test & PE) PE) // On peut extraire la composante PE avec un "et" binaire pour tester une condition; 00000011 & 00000010 00000010
....
on peut faire la même chose avec un "ou":
if((test | PE) test) // 00000011 | 00000010 00000011
....
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 4 janv. 2010 à 12:06
Salut. Tu peux essayer ça :
public int GetRang(fa valeur)
{
int i = 0;
foreach (fa test in Enum.GetValues(typeof(fa)))
{
if(test == valeur) return i;
i++;
}
return -1; // Si valeur n'est pas dans la plage de fa
}
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -