我昨天编写了一些单元测试,它们在 .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
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:有谁知道实现的不同之处?如果集合没有元素,ToArray() 是否可能在 .NET 核心中返回一个 Array.Empty<> 单例实例,但在 .NET 中不返回?