- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在尝试向自己验证 C# Equals for IEnumerables 是一个引用等于时,我发现了一些奇怪的事情。在 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
比这更聪明一点。它专为调试目的而设计,与 Equals
不同。方法,因此它实际上比较了两个枚举产生的序列,因为它识别出 IEnumerable<T>
作为一种特殊类型。您还应该注意到它还做了其他有趣的事情,例如返回 true
。当两个参数在数值上相同但值类型不同时(例如 short
和 long
)。
希望对您有所帮助。
关于C# Assert.AreNotEqual 与等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789818/
在尝试向自己验证 C# Equals for IEnumerables 是一个引用等于时,我发现了一些奇怪的事情。在 NUnit 中使用以下设置 var a = (IEnumerable)(new[]
在C#中,有什么区别 Assert.AreNotEqual 和 Assert.AreNotSame 最佳答案 这里给出的几乎所有答案都是正确的,但可能值得举个例子: public static str
使用 NUnit 2.5.9,以下测试意外失败: [TestFixture] public class FooTest { [Test] public void Inequality(
Assert.IsNotNull(·) Assert.AreNotEqual(null,·) 之间是否存在功能差异? 我更喜欢第一个,因为它更具可读性。一位同事使用了第二种,我想知道是否也存在功能差异
我是一名优秀的程序员,十分优秀!