septembre
2007
J’ai lu dans la nuit le post suivant.
J’ai d’abord cru à une blague mais après réflexion, ça ne me choque pas.
« static void test(int? arg1, int? arg2)
{
Console.WriteLine(« arg1 == arg2 returns {0} », (arg1 == arg2));
Console.WriteLine(« arg1 <= arg2 returns {0} », (arg1 <= arg2));
}
The output in some cases will be:
arg1 == arg2 returns True
arg1 <= arg2 returns False »
Ce cas n’arrive que lorsque arg1 et arg2 sont égales à null.
null == null a un sens et retourne true. En revanche null <= null n’a pas de sens d’où le return false.
Pourquoi ce problème ne se pose pas en VB ? Parce que, sauf erreur de ma part, VB ne comprend pas l’opérateur implicit. Du coup, un Nullable(Of Integer) ne dispose pas des opérateurs de Integer en VB. Du coup, il est impossible de comparer deux Nullable(Of Integer) entre eux. Donc le problème ne se pose pas.
Pour info, en VB, il faudrait d’abord tester arg1.HasValue et arg2.HasValue puis, le cas échéant, tester arg1.Value avec arg2.Value.