从整数0调用IEquatable.Equals来测试null对象应该返回false,但是当使用反射时,它返回true。给定以下代码,我希望iEquals
和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
字符串
1条答案
按热度按时间aamkag611#
MethodBase.Invoke
文档:如果反射方法的参数是值类型,并且参数中对应的参数是
null
,则运行时传递值类型的零初始化示例。对于
int
,零初始化示例是0
,因此True
。另一个例子可以是bool
-对于布尔值,零初始化示例是false
,因此:字符串
sharplab.io