SORU
25 ŞUBAT 2011, Cuma


Neden yapar .4.0 bu dizi farklı tür NET .NET 3.5?

This stackoverflow question NaN değerleri ile çift sıralama diziler hakkında ilginç bir soru gündeme getirdi. OP aşağıdaki kodu gönderildi

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();
}

Sen altında bu çalıştırın .NET 3.5 çerçeve, dizisi aşağıdaki gibi sıralanır

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

Senin altında çalışacak .NET 4.0, dizi biraz daha mantıklı bir şekilde sıralanır:

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

İçinde garip gibi olmasını anlayabiliyorum .NET 3.5 NaN, daha az eşit ya da daha büyük bir şey değil çünkü). Ayrıca yaptığı gibi, bir bakıma anlayabilirim .NET 4.0. Benim sorum, neden bu 4.0 3.5 değişti mi? Ve bu değişim için Microsoft belgelerine mi?

CEVAP
26 ŞUBAT 2011, CUMARTESİ


Hata düzeltme. Hata ayrıntıları ile geri bildirim raporu is here. Hata raporu için Microsoft'un cevabı:

Bu hata şu: etkilediğini unutmayın

  • Dizi.Dizi Çift içerir. () sıralama, NaN
  • Dizi.Bu dizi de içerir. () sıralama, NaN
  • yukarıda herhangi bir ziyaretçi Listesinde örneğin.Listesi Çift içerir. () sıralama, NaN

Bu hata çalışma zamanı bir sonraki sürümde sabit olacak; o zamana kadar doğru sıralama yapar özel bir IComparer kullanarak çalışabilirsiniz. Geçici çözüm açıklamalarda belirtildiği gibi, Karşılaştırıcısı kullanmayın.Bu NaN doğru işlemez bu tür rutin bir kısayol ile-kasalı özel olduğu için varsayılan. Bunun yerine, eşdeğer bir karşılaştırma sağlar, ama özel-kasalı olmayacak kendi karşılaştırıcısı sağlayabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • justintimberlakeVEVO

    justintimber

    2 EYLÜL 2009
  • Shylo Sharity

    Shylo Sharit

    27 EKİM 2011
  • Thom Hall

    Thom Hall

    24 Kasım 2006