JetBrains Rider 2026.1 Help

コードインスペクション: 文字列比較を明示的に指定する

このインスペクションは、 文字列変換で明示的にカルチャを指定すると同様に、異なるカルチャ設定のマシンでコードを実行する際の問題を回避できます。

String.ToUpper()/String.ToLower() によって返された文字列結果が等価演算子 (==/!=) を使用して比較される場合、比較結果はマシンのロケールによって異なる場合があります。 標準的な例はトルコ語で、小文字のドットなしの「ı」とそれに対応する大文字の「I」があり、小文字の「i」とドット付きの大文字の「İ」があります。

大文字と小文字を区別しない比較に String.ToUpper()/String.ToLower() を使用する場合は、次のようになります。

public void Foo(string a, string b) { if (a.ToUpper() != b.ToUpper()) { } // or if (a.ToLower() != b.ToLower()) { } }
Public Sub Foo(a As String, b As String) If a.ToUpper() <> b.ToUpper() Then End If ' or If a.ToLower() <> b.ToLower() Then End If End Sub

JetBrains Rider は、 String.Equals() のオーバーロードに置き換えることを提案しています:

if (!String.Equals(a, b, StringComparison.CurrentCultureIgnoreCase)) {}
If Not String.Equals(a, b, StringComparison.CurrentCultureIgnoreCase) Then End If

文化の設定を考慮して文字列が比較されることがすぐに分かります。

比較が明示的にカルチャ非依存にされている場合は、比較ルールのパラメーターで String.Equals()InvariantCultureIgnoreCase と共に使用することも推奨されます。例えば:

if (a.ToLowerInvariant() == b.ToLowerInvariant()) {}
If a.ToLowerInvariant() = b.ToLowerInvariant() Then End If

と置き換えることができた

if (String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase)) {}
If [String].Equals(a, b, StringComparison.InvariantCultureIgnoreCase) Then End If
2026 年 6 月 12 日