gpt4 book ai didi

c# - 为什么 .NET 4.0 对该数组的排序方式与 .NET 3.5 不同?

转载 作者:IT王子 更新时间:2023-10-29 03:54:02 25 4
gpt4 key购买 nike

This stackoverflow question提出了一个关于使用 NaN 值对 double 组进行排序的有趣问题。 OP 发布了以下代码:

static void Main(string[] args)
{
double[] someArray = { 4.0, 2.0, double.NaN, 1.0, 5.0, 3.0, double.NaN, 10.0, 9.0, 8.0 };

foreach (double db in someArray)
{
Console.WriteLine(db);
}

Array.Sort(someArray);
Console.WriteLine("\n\n");
foreach (double db in someArray)
{
Console.WriteLine(db);
}

Console.ReadLine();
}

在 .NET 3.5 框架下运行时,数组排序如下:

1,4,NaN,2,3,5,8,9,10,NaN

当您在 .NET 4.0 下运行它时,数组的排序会更符合逻辑:

NaN,NaN,1,2,3,4,5,8,9,10

我能理解为什么它会在 .NET 3.5 中奇怪地排序(因为 NaN 不等于、小于或大于任何值)。我也能理解为什么它会按照它在 .NET 4.0 中的方式进行排序。我的问题是,为什么这会从 3.5 变为 4.0?有关此更改的 Microsoft 文档在哪里?

最佳答案

这是一个错误修复。包含错误详细信息的反馈报告 is here .微软对错误报告的回应:

Note that this bug affects the following:

  • Array.Sort(), where the array contains Double.NaN
  • Array.Sort(),其中数组包含Single.NaN
  • 上面的任何调用者,例如在 List.Sort() 上,其中列表包含 Double.NaN

This bug will be fixed in the next major version of the runtime; until then you can work around this by using a custom IComparer that does the correct sorting. As mentioned in the workaround comments, don't use Comparer.Default, because this is special-cased with a shortcut sort routine that doesn't handle NaN correctly. Instead, you can provide your own comparer that provides an equivalent comparision, but won't be special-cased.

关于c# - 为什么 .NET 4.0 对该数组的排序方式与 .NET 3.5 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com