从整数 0 调用 IEquatable.Equals 来测试空对象应该返回 false,但使用反射时它返回 true。给定以下代码,我期望 foriEquals
和equals
返回“false”,但反射代码返回 true,为什么?我使用的是 C# 7.3 和 .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
来自
MethodBase.Invoke
文档:对于
int
零初始化的实例是0
,因此True
。另一个例子是bool
- 对于布尔值零初始化的实例是false
这样的:演示@sharplab.io