Ошибка сравнения строк .NET Framework

Это требование для любогосортировка сравнения работать, что основной оператор заказапереходный а такжеантисимметричен.

В .NET это не так для некоторых строк:

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
}

Ты видишь этоx строго больше, чемy, а такжеy строго больше, чемx.

Потому чтоx.CompareTo(x) и так далее все дают ноль (0), понятно, что это не заказ. Не удивительно, что я получаю непредсказуемые результаты, когда яSort массивы или списки, содержащие такие строки, какx а такжеy, Хотя я не проверял это, я уверенSortedDictionary<string, WhatEver> возникнут проблемы с сохранением себя в отсортированном порядке и / или при поиске элементов, если строки похожиx а такжеy используются для ключей.

Эта ошибка хорошо известна? Какие версии фреймворка затронуты (я пытаюсь это с .NET 4.0)?

РЕДАКТИРОВАТЬ:

Вот пример, где знак отрицательный в любом случае:

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

Ответы на вопрос(2)

Ваш ответ на вопрос