Подтвердить что ты не робот

Resharper рекомендует изменить CompareTo на CompareOrdinal

У меня есть сортировщик, который выполняет различные сравнения. Resharper говорит, что я должен перейти от String.CompareTo к String.CompareOrdinal. Действительно ли это приносит большую пользу или это то, что я должен настроить для правил проверки?

CompareTo:

config.Sort(delegate(configData data1, configData data2)
{
    if (data1.SettingName.Equals(data2.SettingName))
    {
        string m1 = data1.SettingMachine;
        string m2 = data2.SettingMachine;
        if (m1 == null)
            m1 = string.Empty;
        if (m2 == null)
            m2 = string.Empty;
        return m1.CompareTo(m2);
    }

    return data1.SettingName.CompareTo(data2.SettingName);
});

CompareOrdinal:

config.Sort(delegate(configData data1, configData data2)
{
    if (data1.SettingName.Equals(data2.SettingName))
    {
        string m1 = data1.SettingMachine;
        string m2 = data2.SettingMachine;
        if (m1 == null)
            m1 = string.Empty;
        if (m2 == null)
            m2 = string.Empty;
        return String.CompareOrdinal(m1, m2); ;
    }

    return String.CompareOrdinal(data1.SettingName, data2.SettingName);
});
4b9b3361

Ответ 1

Resharper обеспокоен тем, что если вы должны запускать свой код в системе, которая использует другую кодировку по умолчанию, сравнение может завершиться неудачей. CompareOrdinal является культурно-инвариантным, тем самым устраняя проблему.

Ответ 2

Я предполагаю, что Resharper пытается предотвратить нулевые ссылки.

Что произойдет, либо data1 или data2 будет null при использовании первого фрагмента кода? Сравните это со вторым фрагментом кода.

Это немного более безопасно.

ИЗМЕНИТЬ

В обоих фрагментах первый if провалится, но я имею в виду, конечно, части сравнения:)