3

クラスがObjectに対して定義された動作を明確にオーバーライドしない限り、ReferenceEqualsと==は同じことを行います...参照を比較します。

プロパティセッターでは、私は一般的にパターンを使用しました

private MyType myProperty;

public MyType MyProperty
{
    set
    {
        if (myProperty != value)
        {
            myProperty = value;
            // Do stuff like NotifyPropertyChanged
        }
    }
}

ただし、Entity Frameworkによって生成されたコードでは、ifステートメントは次のように置き換えられます。

    if (!ReferenceEquals(myProperty, value))

ReferenceEqualsの使用はより明確です(すべてのC#プログラマーが、オーバーライドされない場合でも==が同じことを行うことを知っているわけではないと思います)。

2つのif-variantの間に私を逃れている違いはありますか?彼らはおそらく、POCO設計者がオーバーライドした可能性を説明してい==ますか?

つまり、オーバーライド==していない場合、?の代わりに!=を使用して保存しますReferenceEquals()か?

4

2 に答える 2

5

異なるセマンティクスは次のとおりです。

  • ReferenceEquals()オブジェクトがまったく同じであることを意味する場合は、使用する必要があります (同一性チェック)。
  • object.Equals()オブジェクトが同じ値を持つことを意味する場合に使用されます (等値チェック)
  • ==()不変型にのみ使用されます。次に、それを使用して等しいかどうかをテストします。

もちろん、逆の対応物はそれに応じて意味されます。

ここに要約があります

于 2010-06-14T05:35:42.133 に答える
-3

== は参照が同じ場所を指しているかどうかをテストする必要がありますが、ReferenceEquals は同じデータが含まれているかどうかをテストします。

于 2010-06-14T05:26:26.267 に答える