C# で文字列を比較するのはとても簡単です。実際、いくつかの方法があります。下のブロックにいくつか挙げました。私が知りたいのは、それらの違いと、どの方法を使うべきかということです。絶対に避けるべき方法はありますか? 私が挙げていない方法はありますか?
string testString = "Test";
string anotherString = "Another";
if (testString.CompareTo(anotherString) == 0) {}
if (testString.Equals(anotherString)) {}
if (testString == anotherString) {}
(注: この例では、以下または以上ではなく、等しいことを求めていますが、この点についても自由にコメントしてください)
ベストアンサー1
これらの関数の動作に関するルールは次のとおりです。
stringValue.CompareTo(otherStringValue)
null
文字列の前に来る- は を使用します
CultureInfo.CurrentCulture.CompareInfo.Compare
。つまり、文化に依存する比較が使用されるということです。これは、ドイツでは が とß
等しいとみなされることを意味します。SS
stringValue.Equals(otherStringValue)
null
何にも等しくないと見なされる- オプションを指定しない限り
StringComparison
、直接的な順序等価性チェックのように見えるものが使用されます。つまり、どの言語や文化でもß
は と同じではありません。SS
stringValue == otherStringValue
- と同じではありません
stringValue.Equals()
。 - 演算子
==
は静的Equals(string a, string b)
メソッドを呼び出します (このメソッドは次に内部でEqualsHelper
比較を実行します)。 .Equals()
文字列を on で呼び出すと参照例外null
が発生しますが、 onでは発生しません。null
==
Object.ReferenceEquals(stringValue, otherStringValue)
参照が同じであるかどうかをチェックするだけです。つまり、同じ内容の 2 つの文字列ではなく、文字列オブジェクトをそれ自体と比較していることになります。
メソッド呼び出しを使用する上記のオプションでは、比較方法を指定するための追加のオプションを持つオーバーロードがあることに注意してください。
等価性をチェックしたいだけの場合のアドバイスは、文化に依存する比較を使用するかどうかを決め、選択に応じて.CompareTo
または を使用することです。.Equals