Enumérations [Résolu]

Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
- - Dernière réponse : krimog
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 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.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
3
Merci
oui... à ton avis, quel est le point commun entre 1, 2, 4, et 8 ?

Ce sont des puissances de 2 :
1 = 2^0
2 = 2^1
4 = 2^2
8 = 2^3

à toi d'écrire la méthode qui va bien !

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
4
0
Merci
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.
Commenter la réponse de LordOfTheShadow
Messages postés
18
Date d'inscription
samedi 3 juillet 2004
Statut
Membre
Dernière intervention
21 juin 2010
0
Merci
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
....

J'espère que ça poura t'aider..
Commenter la réponse de thedarkkillerz
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
28
0
Merci
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é. -
Commenter la réponse de krimog