1

String オブジェクトをリテラル (または定数など) の文字列に対してチェックする方法をどこかで読んだことをずっと前に覚えています。nullチェックをスキップする方法は次のとおりです。

string a;
// do something
if("some literal string".Equals(a))
    Console.WriteLine("equal");

よりも優先されます

string a;
// do something
if(a!=null && a.Equals("some literal string"))
    Console.WriteLine("equal");

に対するチェックをスキップしnullます。ただし、現在それに関する情報を見つけることができません。前者について異論や懸念はありますか。

4

2 に答える 2

8

おそらく、文字列の真の値の等価性チェックを実行するために使用する必要があるJava について考えているでしょう。アイデンティティの参照を比較するだけです。equals==

ただし、C# には、演算子のオーバーロードと、等価性のためのstringオーバーロードがあります。==したがって、次のように記述しても問題ありません。

if (text == "target value")

==演算子は、比較のどちらか (または両方) の側を処理しnullます。

  • 両側が null の場合、結果は true
  • 片側だけが null の場合、結果は false
  • それ以外の場合、文字列は序数が等しいかどうか比較されます

ただし、オーバーロードは、両方の式のコンパイル時stringの型が である場合にのみ使用されることに注意してください。たとえば、次の場合:

object o = new String("foo".ToCharArray());
if (o == "foo")

...次に、オーバーロードされた演算子を使用する代わりに参照を比較します。

于 2012-10-06T22:26:08.677 に答える
1

私は使用することを好みます:

if (String.Equals("Value", a))

2 つの変数を比較する場合に特に便利ですnull。この静的メソッドを使用すると、その場合もカバーされます。

于 2012-10-06T22:23:38.737 に答える