[Syntaxe] Test dégalité avec opérateur de comparaison ou fonction Object.Equals
Dalida
Messages postés6728Date d'inscriptionmardi 14 mai 2002StatutContributeurDernière intervention11 janvier 2016
-
17 janv. 2006 à 18:23
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 2011
-
18 janv. 2006 à 00:30
salut,
pour tester
l'égalité de deux objets vous utilisez plutôt un opérateur de
comparaison (= ou Is) ou la fonction Equals héritée de System.Object ?
pour ma part je réserve l'opérateur mathématique à l'assignation de valeur et j'utilise Object.Equals pour le reste car :
- il est utilisable avec tous les types (merci l'héritage)
- il évite les conversions explicites dans le cas des types numériques [i.e. : Cbool(myInteger = 0) = True].
mais le sujet est vaste, je me demande en particulier quelle syntaxe
sera le mieux transcrite en IL ou plus simplement si il existe des cas
particuliers.
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 18 janv. 2006 à 00:30
Salut
Pour ma part j'utilise toujours le equals
Sauf pour les types enum, et les types valeurs ( je ne considere pas string comme type valeur)
1 --> enum est un type valeur (je crois)
Private Enum tristate As Integer
actif = 0
inactif = 1
undef = 2
End Enum
Private Sub test()
Dim a As TriState
a = tristate.actif
If a = tristate.actif Then
Console.WriteLine("OK")
Else
Console.WriteLine("KO")
End If
If a.Equals(tristate.actif) Then
Console.WriteLine("OK")
Else
Console.WriteLine("KO")
End If
If a = 0 Then
Console.WriteLine("OK")
Else
Console.WriteLine("KO")
End If
If a.Equals(0) Then
Console.WriteLine("OK")
Else
Console.WriteLine("KO")
End If
le dernier est KO
les autres passent
Je pensais avoir vu quelque part qu'il y avait un probleme sur les enum.
2 ---
Sinon pour les types valeurs
(integer, boolean ,struct, enum, ..)
Le probleme qui doit avoir est celui du boxing unboxing (opération qui est couteuse)
(operation de transformation en objet)
donc il est conseille sur ces types ci de faire des comparaisons avec = et non equals qui veux des objets.
Si quelqu'un a plus de précision, ca serait intéressants.