12

さまざまな比較を行うソーターがあります。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);
});
4

2 に答える 2

17

Resharperは、異なるデフォルトの文字エンコードを使用しているシステムでコードを実行すると、比較が失敗する可能性があることを懸念しています。CompareOrdinal文化に依存しないため、問題が解消されます。

于 2012-08-14T00:05:37.653 に答える
0

私の推測では、Resharperはnull参照を防止しようとしています。

最初のコードフラグメントを使用すると、data1またはdata2がnullになるとどうなりますか?これを2番目のコードフラグメントと比較してください。

この方法の方が少し安全です。

編集

どちらのフラグメントでも、最初のフラグメントifは失敗しますが、もちろん比較の部分を参照しています:)

于 2012-08-13T21:00:16.243 に答える