System.Collections.GenericのListクラスを操作する場合、ContainsやIndexOfなどのメソッドは、IEquatableから実装されたEqualsメソッドまたはObjectクラスから提供されるオーバーライドされたEqualsメソッドのいずれかを使用して、渡された参照のオブジェクトを比較します。 Object.Equalsがオーバーライドされていない場合、渡された参照が自身と同じオブジェクトを指しているかどうかをチェックします。比較する?
私の質問は、Equalsがオーバーライドされた場合、Listを参照で比較する方法はありますか? のコードは、以下のリストから項目を削除します:
class Program
{
static void Main(string[] args)
{
var s1 = new SomeClass() { A = 5 };
var s2 = new SomeClass() { A = 5 };
var list = new List<SomeClass>();
list.Add(s1);
list.Remove(s2); // s1 will get removed, even though s2 has been
// passed, because s1's Equals method will return true.
}
}
class SomeClass
{
public int A { get; set; }
public override bool Equals(object obj)
{
SomeClass s = obj as SomeClass;
if (s == null)
{
return false;
}
else
{
return s.A == this.A;
}
}
}
のは、私は対等の工assの実装を削除することができないんだとしましょう、参照の代わりに、値によって比較リストを作る方法はありますか?
ありがとう、それはうまくいくようです。 – haiyyu