Странное поведение по умолчанию, строка сравнения с подчеркиванием

Обычно, если символ A меньше, чем символ B, я бы ожидал при сравнении строк:

AB < BA

И действительно, в словаре вы можете найти слова AB перед словами BA.

Почему-то это не относится к подчеркиванию

Небольшая программа; используйте копировать вставить, чтобы проверить

public static void Main()
{
    IComparer<string> comp = Comparer<string>.Default;
    Console.WriteLine("Compare '-' with '_': " + comp.Compare("-", "_").ToString());
    Console.WriteLine("Compare '--' with '-_': " + comp.Compare("--", "-_").ToString());
    Console.WriteLine("Compare '-_' with '_-': " + comp.Compare("-_", "_-").ToString());
}

Выход:

Compare '-' with '_': -1
Compare '--' with '-_': -1
Compare '-_' with '_-': 1

Последнее значение возвращает +1
Так:

"-"< "_"              // minus is less than underscore
"-_" > "_-"           // minus underscore MORE THAN underscore minus

Это происходит при использовании строкового компаратора по умолчанию. StringComparer.Ordinal работает как положено.

Это ошибка в компараторе строк по умолчанию?

0 ответов

Другие вопросы по тегам