为什么这些 ulong 数组不被认为是相等的?

Why are these ulong arrays not considered equal?

考虑函数:

public static ulong[] productFib(ulong prod)
    {
        ulong fib1 = 0;
        ulong fib2 = 1;

        while ((fib1 * fib2) < prod)
        {
            ulong temp = fib1;
            fib1 = fib2;
            fib2 = temp + fib2;

        }

        return new ulong[] { fib1, fib2, 1 };
    }

我正在练习一个测试如下所示的套路:

ulong[] r = new ulong[] { 55, 89, 1 };
Assert.AreEqual(r, Kata.productFib(4895));

在直接 window 中,我可以看到 return 数组不仅是 ulong 类型,而且具有我期望的 3 个元素,但 MSTest 失败并显示:

Message: Assert.AreEqual failed. Expected:<System.UInt64[]>. Actual:<System.UInt64[]>.

测试断言或我的函数是否有问题导致此测试失败?

谢谢

C# 数组是引用类型。 Assert.AreEqual() 将检查引用是否相等,而不是检查您是否传递了值类型。

Assert.AreEqual() 使用传递参数的 Equals() 方法。数组只是比较它们的引用,而不是它们的内容。所以两个不同的数组 instances 永远不会通过这个测试。

你可以这样使用 linq SequenceEqual:

Assert.IsTrue(r.SequenceEqual(Kata.productFib(4895)));