Derrière cela, je veux comparer bit à bit deux variables V1 et V2 -de type MonEnum-, pour savoir si V1 correspond à la valeur ciblé par V2
Si V2 vaut valeur1, valeur2, valeur3 ou valeur4, je peux faire un test dégalité (==) mais si V2 vaut Valeur5, V1 devrait pouvoir valoir Valeur1, Valeur2 ou Valeur5 (pas sur que je soit clair la !!)
Alors j'ai voulu faire un truc du genre
if (V1 & V2)
{
return "OK"
}
else
return "KO"
mais le compilateur me dit qu'il ne peut pas convertir implicitement MonEnum en bool !!!
Comment que je peux faire ????
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200629 11 juil. 2005 à 20:05
Je suis arrivé à ...
if ((V1 & V2) != 0) ....
et la ca compile bien mais en debuguant, si je met (V1 & V2) en tant qu'espion, il me m'affiche "impossible d'évaluer l''expresison" et le test est toujours vrai !!!
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200629 11 juil. 2005 à 20:14
Merci "coq" mais je galère toujours ....
Je suis en train de m'embrouiller grave la !!!
Je vosu redonne toutes les billes depuis le début :
Cette enum me sert à qualité le "type" d'un objet. En gros, cela peut être :
-Un caractère,
-un entier,
-un reel,
-un nombre (ce qui regroupe les entiers et les reels)
Par la suite, j'ai une fonction qui recoit un objet (avec son type défini) et un type requis pour que la fonction se déroule bien.
Je dois donc comparé le type de l'objet reçu avec le type attendu.
Comme il pourrai arrivé que l'on attende un nombre (plutot qu'un entier ou un reel), je voulais me simplifer la vie en evitant de coder tout un tas de tests (par des if ou un switch) en me disant qu'une comparaison au niveau des bits le ferait en un seul test, mais je m'enfonnnnnnncccccccceeeeeeeeeeee !!
si une âme charitable peut me venir en aide ...
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 11 juil. 2005 à 20:19
Désolé, la logique binaire me depasse un peu là.
Sinon sauf erreur le seul moyen que ton test "if ((V1 & V2) != 0)" soit faux serait que V1 et/ou V2 valle 0 non ?
Cocoricoooooooo !!!!
coq
MVP Visual C#
Vous n’avez pas trouvé la réponse que vous recherchez ?
Troborg
Messages postés65Date d'inscriptionsamedi 24 avril 2004StatutMembreDernière intervention 1 août 20056 11 juil. 2005 à 20:45
En tout cas :
public enum MonEnum : uint
{
valeur1 = 1,
valeur2 = 2,
valeur3 = 4,
valeur4 = 8,
valeur5 = 9
}
static void Main(string[] args)
{
MonEnum toto = MonEnum.valeur5;
if ((toto & MonEnum.valeur1) !=0 )
System.Console.WriteLine("valeur1");
if ((toto & MonEnum.valeur2) != 0)
System.Console.WriteLine("valeur2");
if ((toto & MonEnum.valeur3) !=0 )
System.Console.WriteLine("valeur3");
if ((toto & MonEnum.valeur4) !=0 )
System.Console.WriteLine("valeur4");
System.Console.WriteLine("-- FIN --");
Console.ReadLine();
}
M'affiche bien les "valeur1" et "valeur4" attendus..
Et quand je mets "toto & MonEnum.valeur1", "toto & MonEnum.valeur2", "toto & MonEnum.valeur3" et "toto & MonEnum.valeur4" en espion, les résultats qu'il m'affiche sont bons (à savoir "MonEnum.valeur1", "0", "0", "MonEnum.valeur4")
Troborg
Messages postés65Date d'inscriptionsamedi 24 avril 2004StatutMembreDernière intervention 1 août 20056 11 juil. 2005 à 21:04
Autre suggestion..
Si tu veux tester qu'un objet V1 soit de même type qu'un objet V2 :
"if (V1.GetType().Equals(V2.GetType()))"
Par contre dans cette méthode même si V1 appartient à un type dérivant
de V2, le test sera faux... Il ne sera vrai que si V1 et V2 sont
exactement de même types...
Alors que dans la méthode précédente (en utilisant "is"), si V1 appartient à un type dérivant par exemple du type int, le test "V1 is int" sera vrai....
Bref, que tu utilises "is" ou "GetType", vérifie bien que l'utilisation que tu en fais corresponde à ce que tu as besoin !
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200629 12 juil. 2005 à 09:14
Merci pour toutes vos propositions de code ... je m'en vais les tester cet après-midi et vous tiendrais au courant ...
Troborg < Je ne peux pa utiliser l'opérateur Is ou la méthode GetType() car mes objets ne sont pas des objets intrinsèques de .NET ! Ce sont des objets relativement complexes et je n'ai pas d'autres choix que de passer par une propriétés que j'ai nommée "Type". En fait, je crois qu'il me faudrait non pas daire une classe objet, mais plusieurs classes objets héritant d'une autre classe d'objet plus générale. Mais j'en suis à mes balbutiement en C# et ne me suis pas encore pencher sur le PB. Mais en écrivant ces ligne et en y reflechissant, je me dit que ce sera peut-être la meilleure option pour mon cas. Va falloir que je creuse cela plus tard ...