我昨天写了一些单元测试,它们在 .NET 4.6.1 中通过了测试,但在 .NET core 3.0 中失败了,因为在这个测试中生成的数组实例数量在两个环境中是不同的。经过一些调查发现,使用 LINQ 创建的空数组的数量不同。最终,我将其简化到以下测试:
[Test]
public void ArrayTest()
{
var numbers = Enumerable.Range(1, 5);
int[] items1 = numbers.Where(i => i > 5).ToArray();
int[] items2 = numbers.Where(i => i > 5).ToArray();
Assert.IsFalse(items1 == items2); // fails in .NET core 3 but passes in .NET 461
Assert.IsFalse(items1.Equals(items2)); // fails in .NET core 3 but passes in .NET 461
}
我的问题是:有人知道这个实现的不同之处在哪里吗?在.NET Core中,如果集合没有元素,ToArray()是否会返回Array.Empty<>单例实例而在.NET中则不会?