オブジェクトが同じクラスの新しいオブジェクトと等しいかどうかを確認するにはどうすればよいですか?

アルバートコルタダ

次のようなオブジェクトがある場合:

public class Person
{
    public int id {get;set;}
    public string name {get;set;}
}

そして私はその振る舞いが欲しい:

Person a = new Person();
Person b = new Person();

a == b;

a == bがtrueを返す場合、Object.Equals()メソッドをオーバーライドする必要がありますか?または、Equalsメソッドをオーバーライドせずにそれを行う他の方法はありますか?

編集

呼び出す外部メソッドが新しいオブジェクトを返すのか、新しいオブジェクトとは異なるデータを持つオブジェクトを返すのかを知りたいので、データを比較したい

アッバス

これを行うにはいくつかの方法があります。デフォルトEquals()では==、参照が等しいかどうかを確認します。つまり、次のようになります。

Person a = new Person();
Person b = a:

a.Equals(b); //true
a == b; //true

したがって、オブジェクトは値の同等性について比較されません。つまり、次のようになります。

Person a = new Person { id = 1, name = "person1" };
Person b = new Person { id = 1, name = "person1" };

a.Equals(b); //false
a == b; //false

オブジェクトの値を比較するには、次のようにメソッドEquals()GetHashcode()メソッドをオーバーライドできます

public override bool Equals(System.Object obj)
{
    if (obj == null)
        return false;

    Person p = obj as Person;
    if ((System.Object)p == null)
        return false;

    return (id == p.id) && (name == p.name);
}

public bool Equals(Person p)
{
    if ((object)p == null)
        return false;

    return (id == p.id) && (name == p.name);
}

public override int GetHashCode()
{
    return id.GetHashCode() ^ name.GetHashCode();
}

これで、比較すると他の結果が表示されます。

Person a = new Person { id = 1, name = "person1" };
Person b = new Person { id = 1, name = "person1" };
Person c = a;

a == b; //false
a == c; //true
a.Equals(b); //true
a.Equals(c); //true

==オペレータは上書きされませんので、まだ参照の比較を行います。これは、!=演算子だけでなくオーバーロードすることで解決できます

public static bool operator ==(Person a, Person b)
{
    if (System.Object.ReferenceEquals(a, b))
        return true;

    if ((object)a == null || (object)b == null)
        return false;

    return a.id == b.id && a.name == b.name;
}

public static bool operator !=(Person a, Person b)
{
    return !(a == b);
}

チェックを実行すると、次のようになります。

Person a = new Person { id = 1, name = "person1" };
Person b = new Person { id = 1, name = "person1" };
Person c = a;

a == b; //true
a == c; //true
a.Equals(b); //true
a.Equals(c); //true

もっと読む:

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクトの配列が同じ値であるかどうかを確認するにはどうすればよいですか

分類Dev

getLoggerが新しいオブジェクトを作成したかどうかを確認するにはどうすればよいですか?

分類Dev

配列内のオブジェクトIDが同じかどうかを確認するにはどうすればよいですか?

分類Dev

追加する前に、同じIDのオブジェクトがオブジェクトのリスト内にすでに存在するかどうかを確認するにはどうすればよいですか?

分類Dev

reactとjavascriptを使用してオブジェクトの配列がnullかどうかを確認するにはどうすればよいですか?

分類Dev

オブジェクトに同じ文字列があるかどうかを確認するにはどうすればよいですか?

分類Dev

同じクラスのオブジェクトを繰り返し処理してJqueryと照合するにはどうすればよいですか?

分類Dev

オブジェクトが別のオブジェクトのプロパティにプロパティとしてネストされているかどうかを確認するにはどうすればよいですか?

分類Dev

java-オブジェクトが特定のクラスのタイプかどうかを確認するにはどうすればよいですか?

分類Dev

オブジェクトリスト内に同じタイプのオブジェクトがあるかどうかを確認していますか?

分類Dev

クラスオブジェクトがC ++セットに存在するかどうかを確認するにはどうすればよいですか?

分類Dev

postmanテストを使用して、API応答の1つのノードがすべてのオブジェクトで同じ値を持っているかどうかを確認するにはどうすればよいですか?

分類Dev

2つのMapオブジェクトが等しいかどうかを確認するにはどうすればよいですか?

分類Dev

オブジェクトのタイプがこれと等しいことをC#で確認するにはどうすればよいですか?

分類Dev

オブジェクトとオブジェクト内のオブジェクトの配列を反復処理し、各オブジェクトで同じ関数を実行するにはどうすればよいですか?

分類Dev

MongoDBのオブジェクトを部分的に更新して、新しいオブジェクトが既存のオブジェクトとオーバーレイ/マージされるようにするにはどうすればよいですか?

分類Dev

2つのctypesオブジェクトを比較して等しいかどうかを確認するにはどうすればよいですか?

分類Dev

同じクラスの2つのオブジェクトが互いに/ w通信するようにするにはどうすればよいですか?

分類Dev

オブジェクトの配列が同じキーに対して同じ値を持っているかどうかを確認するにはどうすればよいですか?

分類Dev

Googleストレージオブジェクトがライブか非最新かを確認するにはどうすればよいですか?

分類Dev

同じIDのオブジェクトをマージするにはどうすればよいですか

分類Dev

Kotlinで2つのオブジェクトが同じクラスを持っているかどうかを確認するにはどうすればよいですか?

分類Dev

Sphinxが「オブジェクト」を基本クラスとしてリストしないようにするにはどうすればよいですか?

分類Dev

Pythonで別のオブジェクトと同じ内容のオブジェクトを作成するにはどうすればよいですか?

分類Dev

オブジェクトとそのプロパティが存在するかどうかを確認するにはどうすればよいですか?

分類Dev

Javascriptの既存のオブジェクトから新しいオブジェクトを作成するにはどうすればよいですか?

分類Dev

Rustの同じ構造体にrusqliteConnectionオブジェクトとStatementオブジェクトを保存するにはどうすればよいですか?

分類Dev

JavaScriptで既存のオブジェクトを継承する新しいオブジェクトを作成するにはどうすればよいですか?

分類Dev

オブジェクトがカメラの前にあるかどうかを確認するにはどうすればよいですか?

Related 関連記事

  1. 1

    オブジェクトの配列が同じ値であるかどうかを確認するにはどうすればよいですか

  2. 2

    getLoggerが新しいオブジェクトを作成したかどうかを確認するにはどうすればよいですか?

  3. 3

    配列内のオブジェクトIDが同じかどうかを確認するにはどうすればよいですか?

  4. 4

    追加する前に、同じIDのオブジェクトがオブジェクトのリスト内にすでに存在するかどうかを確認するにはどうすればよいですか?

  5. 5

    reactとjavascriptを使用してオブジェクトの配列がnullかどうかを確認するにはどうすればよいですか?

  6. 6

    オブジェクトに同じ文字列があるかどうかを確認するにはどうすればよいですか?

  7. 7

    同じクラスのオブジェクトを繰り返し処理してJqueryと照合するにはどうすればよいですか?

  8. 8

    オブジェクトが別のオブジェクトのプロパティにプロパティとしてネストされているかどうかを確認するにはどうすればよいですか?

  9. 9

    java-オブジェクトが特定のクラスのタイプかどうかを確認するにはどうすればよいですか?

  10. 10

    オブジェクトリスト内に同じタイプのオブジェクトがあるかどうかを確認していますか?

  11. 11

    クラスオブジェクトがC ++セットに存在するかどうかを確認するにはどうすればよいですか?

  12. 12

    postmanテストを使用して、API応答の1つのノードがすべてのオブジェクトで同じ値を持っているかどうかを確認するにはどうすればよいですか?

  13. 13

    2つのMapオブジェクトが等しいかどうかを確認するにはどうすればよいですか?

  14. 14

    オブジェクトのタイプがこれと等しいことをC#で確認するにはどうすればよいですか?

  15. 15

    オブジェクトとオブジェクト内のオブジェクトの配列を反復処理し、各オブジェクトで同じ関数を実行するにはどうすればよいですか?

  16. 16

    MongoDBのオブジェクトを部分的に更新して、新しいオブジェクトが既存のオブジェクトとオーバーレイ/マージされるようにするにはどうすればよいですか?

  17. 17

    2つのctypesオブジェクトを比較して等しいかどうかを確認するにはどうすればよいですか?

  18. 18

    同じクラスの2つのオブジェクトが互いに/ w通信するようにするにはどうすればよいですか?

  19. 19

    オブジェクトの配列が同じキーに対して同じ値を持っているかどうかを確認するにはどうすればよいですか?

  20. 20

    Googleストレージオブジェクトがライブか非最新かを確認するにはどうすればよいですか?

  21. 21

    同じIDのオブジェクトをマージするにはどうすればよいですか

  22. 22

    Kotlinで2つのオブジェクトが同じクラスを持っているかどうかを確認するにはどうすればよいですか?

  23. 23

    Sphinxが「オブジェクト」を基本クラスとしてリストしないようにするにはどうすればよいですか?

  24. 24

    Pythonで別のオブジェクトと同じ内容のオブジェクトを作成するにはどうすればよいですか?

  25. 25

    オブジェクトとそのプロパティが存在するかどうかを確認するにはどうすればよいですか?

  26. 26

    Javascriptの既存のオブジェクトから新しいオブジェクトを作成するにはどうすればよいですか?

  27. 27

    Rustの同じ構造体にrusqliteConnectionオブジェクトとStatementオブジェクトを保存するにはどうすればよいですか?

  28. 28

    JavaScriptで既存のオブジェクトを継承する新しいオブジェクトを作成するにはどうすればよいですか?

  29. 29

    オブジェクトがカメラの前にあるかどうかを確認するにはどうすればよいですか?

ホットタグ

アーカイブ