C# Assert.AreNotEqual 与 Equals

2024-03-20

在尝试向自己验证 C# Equals for IEnumerables 是一个引用 equals 时,我发现了一些奇怪的东西。在 NUnit 中进行以下设置

var a = (IEnumerable<string>)(new[] { "one", "two" });
var b = (IEnumerable<string>)(new[] { "one", "two" });

这次测试

Assert.IsFalse(a.Equals(b));

通过,而这个测试

Assert.AreNotEqual(a, b);

没有。有人能解释一下为什么吗?

编辑:感谢您的回答。我刚刚阅读了 NUnit 的文档,它说了同样的事情,即带有集合的 AreEqual 和 AreNotEqual 测试集合中每个元素的相等性。我想我一直坚持这样一个观念:AreEqual 和 AreNotEqual 只是使用普通的 Equals。


致电给a.Equals(b)回报false因为 a 和 b 不是相同的对象(尽管它们当然是相同的枚举)。这Equals方法,除非被重写,否则会自动通过对象的引用来比较对象,这就是本例中发生的情况。

Assert.AreNotEqual http://msdn.microsoft.com/en-us/library/ms243457.aspx比这个聪明一点。它是为调试目的而设计的,与Equals方法,因此它实际上比较两个枚举产生的序列,因为它识别IEnumerable<T>作为一种特殊类型。您还应该注意到它还做了其他有趣的事情,例如返回true当两个参数在数值上相同但值类型不同时(例如short and long).

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# Assert.AreNotEqual 与 Equals 的相关文章

随机推荐