C# 文字列比較の混乱: String.Equals()
メソッドと ==
演算子は交換可能ですか?
C# では、文字列比較により予期しない結果が生じることがあります。よくある質問は、String.Equals()
メソッドと ==
等価演算子がまったく同じ動作をするかどうかです。
次のコード スニペットを考えてみましょう:
string s = "Category"; TreeViewItem tvi = new TreeViewItem(); tvi.Header = "Category"; Console.WriteLine(s == tvi.Header); // false Console.WriteLine(s.Equals(tvi.Header)); // true Console.WriteLine(s == tvi.Header.ToString()); // true
s
と tvi.Header
の両方に同じ値「Category」が含まれていますが、==
演算子は false
を返し、String.Equals()
メソッドは true
を返します。このため、なぜこれら 2 つの比較方法で異なる結果が得られるのかという疑問が生じます。
String.Equals()
と ==
String.Equals()
演算子と ==
演算子の間には、次の 2 つの基本的な違いがあります。
==
はポリモーフィックです。つまり、その実装は比較されるオブジェクト型の実行時に依存します。 。 String.Equals()
==
演算子は、いずれかの引数が null の場合に String.Equals()
例外をスローします。 NullReferenceException
違いを示す例
これらの違いを説明するために、次のコードを考えてみましょう:
object x = new StringBuilder("hello").ToString(); object y = new StringBuilder("hello").ToString(); if (x.Equals(y)) // True if (x == y) // False
と x
は同じ値を持ちますが、y
演算子は異なるオブジェクトのコンパイル時の型 (==
) に基づいて比較するため、false
を返します。正しい比較を行うには、オブジェクトを適切な型 (この場合は object
) に明示的にキャストする必要があります。 string
string xs = (string)x; string ys = (string)y; if (xs == ys) // True
結論
演算子と String.Equals()
演算子はしばしば同じ意味で使用されますが、それらの実装と null 値の処理における微妙な違いを理解することが重要です。信頼性と一貫性のある文字列比較を保証するには、特に異なる型のオブジェクトを比較する場合や null 参照を扱う場合には、一般に ==
メソッドを使用することをお勧めします。 String.Equals()
以上がC# での文字列比較: `String.Equals()` と `==` はどのような場合に交換可能ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。