C# の文字列比較メソッドの違い 質問する

C# の文字列比較メソッドの違い 質問する

C# で文字列を比較するのはとても簡単です。実際、いくつかの方法があります。下のブロックにいくつか挙げました。私が知りたいのは、それらの違いと、どの方法を使うべきかということです。絶対に避けるべき方法はありますか? 私が挙げていない方法はありますか?

string testString = "Test";
string anotherString = "Another";

if (testString.CompareTo(anotherString) == 0) {}
if (testString.Equals(anotherString)) {}
if (testString == anotherString) {}

(注: この例では、以下または以上ではなく、等しいことを求めていますが、この点についても自由にコメントしてください)

ベストアンサー1

これらの関数の動作に関するルールは次のとおりです。

stringValue.CompareTo(otherStringValue)

  1. null文字列の前に来る
  2. は を使用しますCultureInfo.CurrentCulture.CompareInfo.Compare。つまり、文化に依存する比較が使用されるということです。これは、ドイツでは が とß等しいとみなされることを意味します。SS

stringValue.Equals(otherStringValue)

  1. null何にも等しくないと見なされる
  2. オプションを指定しない限りStringComparison、直接的な順序等価性チェックのように見えるものが使用されます。つまり、どの言語や文化でもßは と同じではありません。SS

stringValue == otherStringValue

  1. と同じではありませんstringValue.Equals()
  2. 演算子==は静的Equals(string a, string b)メソッドを呼び出します (このメソッドは次に内部でEqualsHelper比較を実行します)。
  3. .Equals()文字列を on で呼び出すと参照例外nullが発生しますが、 onでは発生しません。null==

Object.ReferenceEquals(stringValue, otherStringValue)

参照が同じであるかどうかをチェックするだけです。つまり、同じ内容の 2 つの文字列ではなく、文字列オブジェクトをそれ自体と比較していることになります。


メソッド呼び出しを使用する上記のオプションでは、比較方法を指定するための追加のオプションを持つオーバーロードがあることに注意してください。

等価性をチェックしたいだけの場合のアドバイスは、文化に依存する比較を使用するかどうかを決め、選択に応じて.CompareToまたは を使用することです。.Equals

おすすめ記事