Chamar IEquatable.Equals de um número inteiro 0 para testar um objeto nulo deve retornar falso, mas ao usar reflexão ele retorna verdadeiro. Dado o código a seguir, eu esperaria que iEquals
retornasse equals
'falso', mas o código de reflexão retorna verdadeiro, por quê? Estou em C# 7.3 e .NET Framework 4.6.2:
int zero = 0;
object nullObj = null;
var iEquals = zero.GetType().GetInterface("IEquatable`1").GetMethod("Equals");
var reflectionEquals = iEquals.Invoke(zero, new[] { nullObj }); // true
var equals = ((IEquatable<int>)zero).Equals(nullObj); // false
Dos
MethodBase.Invoke
documentos:Para
int
instância inicializada com zero é0
, portantoTrue
. Outro exemplo pode serbool
- para booleanos, a instância inicializada com zero éfalse
assim:Demonstração @sharplab.io