[Syntaxe] Test dégalité avec opérateur de comparaison ou fonction Object.Equals

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 17 janv. 2006 à 18:23
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 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.



qu'en pensez-vous ?



'-----------------------------------------------------

Dim response As String = String.Empty



If CBool(response "Operator") True Then



MessageBox.Show("Opérateur mathématique")



ElseIf response.Equals("Function") = True Then



MessageBox.Show("Fonction héritée")



Else



MessageBox.Show("Et vous, vous faites comment ?")



End If





[ Dalida ]

1 réponse

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
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.
0
Rejoignez-nous