Fehler beim Stringvergleich von .NET Framework

Es ist eine Voraussetzung für jedenVergleich sortieren zu arbeiten, dass der zugrunde liegende Auftragsbetreiber isttransitiv undantisymmetrisch.

In .NET gilt dies nicht für einige Zeichenfolgen:

static void CompareBug()
{
  string x = "\u002D\u30A2";  // or just "-ア" if charset allows
  string y = "\u3042";        // or just "あ" if charset allows

  Console.WriteLine(x.CompareTo(y));  // positive one
  Console.WriteLine(y.CompareTo(x));  // positive one
  Console.WriteLine(StringComparer.InvariantCulture.Compare(x, y));  // positive one
  Console.WriteLine(StringComparer.InvariantCulture.Compare(y, x));  // positive one

  var ja = StringComparer.Create(new CultureInfo("ja-JP", false), false);
  Console.WriteLine(ja.Compare(x, y));  // positive one
  Console.WriteLine(ja.Compare(y, x));  // positive one
}

Siehst du dasx ist streng größer alsy, undy ist streng größer alsx.

weilx.CompareTo(x) und so weiter alle geben Null (0) ist klar, dass dies keine Bestellung ist. Es überrascht nicht, dass ich unvorhersehbare Ergebnisse erhalte, wenn ichSort Arrays oder Listen mit Strings wiex undy. Obwohl ich das noch nicht getestet habe, bin ich mir sicherSortedDictionary<string, WhatEver> wird Probleme haben, sich in sortierter Reihenfolge zu halten und / oder Gegenstände zu finden, wenn Strings wiex undy werden für Schlüssel verwendet.

Ist dieser Fehler bekannt? Welche Versionen des Frameworks sind betroffen (ich versuche dies mit .NET 4.0)?

BEARBEITEN:

Hier ist ein Beispiel, bei dem das Vorzeichen in beiden Fällen negativ ist:

x = "\u4E00\u30A0";         // equiv: "一゠"
y = "\u4E00\u002D\u0041";   // equiv: "一-A"

Antworten auf die Frage(2)

Ihre Antwort auf die Frage