Странное поведение по умолчанию, строка сравнения с подчеркиванием
Обычно, если символ 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 работает как положено.
Это ошибка в компараторе строк по умолчанию?