6 votes

Pourquoi n'est-il pas possible de comparer IntPtr.Zero et default(IntPtr) ?

Je viens d'apprendre à mes dépens que IntPtr.Zero ne peut pas être comparé à default(IntPtr). Quelqu'un peut-il me dire pourquoi?

IntPtr.Zero == new IntPtr(0) -> "impossible d'évaluer l'expression"
IntPtr.Zero == default(IntPtr) --> "impossible d'évaluer l'expression"
IntPtr.Zero == (IntPtr)0 -> "impossible d'évaluer l'expression"

IntPtr.Zero.Equals(IntPtr.Zero) --> exception "La valeur de l'énumération n'était pas dans la plage légale"
IntPtr.Zero.Equals(default(IntPtr)) --> exception "La valeur de l'énumération n'était pas dans la plage légale"

IntPtr.Zero == IntPtr.Zero --> true
new IntPtr(0) == new IntPtr(0) --> true

2voto

jpe Points 633

Fonctionne pour moi dans le code compilé dans VS 2010, VS 2008, VS 2005 SP1, Mono 1.2.6. J'ai réussi à reproduire les deux problèmes dans la fenêtre de surveillance de Visual Studio 2005 uniquement (j'ai essayé avec VS 2005 SP1), le code compilé fonctionne comme prévu. (Par les deux problèmes, je veux dire Problème 1 : "Impossible d'évaluer l'expression", Problème 2 : "La valeur d'énumération était en dehors de la plage légale".) Ainsi, comme l'ont souligné certains des auteurs de commentaires, il s'agit d'un bug de la fenêtre de surveillance de VS 2005 sur lequel vous êtes tombé. Il est étonnamment difficile de trouver rapidement un lien vers le rapport de bug pertinent...

Autrement dans de tels cas, je commencerais par la réflexion pour voir quels types vous essayez de comparer (remplacez Console.Out par un flux significatif auquel vous avez accès):

Console.WriteLine("Le type de new IntPtr(0) est : " + new IntPtr(0).GetType());
Console.WriteLine("Le type de IntPtr.Zero est : " + IntPtr.Zero.GetType());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X