トップ回答者
クラスのインスタンスの比較をするには

質問
-
クラスの比較をして、同一の値をもったクラスであるか確認する良い方法はないでしょうか?
たとえばこのようなクラスがあったとして
class neko
{
public string Name;
public int Size;
}値が同じインスタンスを2つ作って、object.Equalsで比較すると
neko cat1 = new neko();
cat1.Name = "tama";
cat1.Size = 50;neko cat2 = new neko();
cat2.Name = "tama";
cat2.Size = 50;object o1 = (object)cat1;
object o2 = (object)cat2;if (o1.Equals(o2)) Console.ReadLine();←ここでFalse
同じ値なのでTrueが返るのを期待しているのですが、インスタンスそのものは違うためFalseが返ってきます。
単純にNameやSizeを比較して完全一致したらTrueを返す比較メソッドを追加すればいいのですが、
クラスの仕様が変わると比較メソッドも修正する必要がでてきます。
別インスタンスだが、値が同じものを調べる良い方法はないでしょうか?
回答
-
値が等価であるかについては、そのクラスで以下を行うといいです。
Object.Equals メソッドのヘルプに、詳しい説明があります。-
Equals メソッド(および GetHashCode メソッド)のオーバーライド。
-
"==" および "!=" 演算子のオーバーロード。
もし neko が値型(今回は struct)であれば、上記を行わなくても期待されている結果が得られます。
# class が良いか struct が良いかは別の話ですが。
じゃんぬねっとさんが書かれてる IComparable 等は、値の順序が重要な場合かと思います。
-
すべての返信
-
値が等価であるかについては、そのクラスで以下を行うといいです。
Object.Equals メソッドのヘルプに、詳しい説明があります。-
Equals メソッド(および GetHashCode メソッド)のオーバーライド。
-
"==" および "!=" 演算子のオーバーロード。
もし neko が値型(今回は struct)であれば、上記を行わなくても期待されている結果が得られます。
# class が良いか struct が良いかは別の話ですが。
じゃんぬねっとさんが書かれてる IComparable 等は、値の順序が重要な場合かと思います。
-