ホームページ >バックエンド開発 >C++ >C# での文字列比較: `String.Equals()` と `==` はどのような場合に交換可能ですか?

C# での文字列比較: `String.Equals()` と `==` はどのような場合に交換可能ですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-22 11:31:12652ブラウズ

String Comparison in C#: When Are `String.Equals()` and `==` Interchangeable?

C# 文字列比較の混乱: String.Equals() メソッドと == 演算子は交換可能ですか?

C# では、文字列比較により予期しない結果が生じることがあります。よくある質問は、String.Equals() メソッドと == 等価演算子がまったく同じ動作をするかどうかです。

次のコード スニペットを考えてみましょう:

<code class="language-csharp">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</code>

stvi.Header の両方に同じ値「Category」が含まれていますが、== 演算子は false を返し、String.Equals() メソッドは true を返します。このため、なぜこれら 2 つの比較方法で異なる結果が得られるのかという疑問が生じます。

String.Equals()==

の主な違い

String.Equals() 演算子と == 演算子の間には、次の 2 つの基本的な違いがあります。

  1. 型固有の実装: 演算子はオブジェクトのコンパイル時の型に基づいて比較しますが、== はポリモーフィックです。つまり、その実装は比較されるオブジェクト型の実行時に依存します。 。 String.Equals()
  2. Null 値の処理: 演算子は、Null 参照を比較するときに例外をスローしませんが、== 演算子は、いずれかの引数が null の場合に String.Equals() 例外をスローします。 NullReferenceException

違いを示す例

これらの違いを説明するために、次のコードを考えてみましょう:

<code class="language-csharp">object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();

if (x.Equals(y)) // True

if (x == y) // False</code>

x は同じ値を持ちますが、y 演算子は異なるオブジェクトのコンパイル時の型 (==) に基づいて比較するため、false を返します。正しい比較を行うには、オブジェクトを適切な型 (この場合は object) に明示的にキャストする必要があります。 string

<code class="language-csharp">string xs = (string)x;
string ys = (string)y;

if (xs == ys) // True</code>

結論

演算子と String.Equals() 演算子はしばしば同じ意味で使用されますが、それらの実装と null 値の処理における微妙な違いを理解することが重要です。信頼性と一貫性のある文字列比較を保証するには、特に異なる型のオブジェクトを比較する場合や null 参照を扱う場合には、一般に == メソッドを使用することをお勧めします。 String.Equals()

以上がC# での文字列比較: `String.Equals()` と `==` はどのような場合に交換可能ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。