Quando si lavora con la classe List da System.Collections.Generic, metodi come Contains o IndexOf confronteranno l'oggetto del riferimento passato utilizzando il metodo Equals implementato da IEquatable o il metodo Equals sovrascritto fornito dalla classe Object. Se Object.Equals non viene sovrascritto, controllerà se i punti di riferimento passati hanno lo stesso oggetto di se stesso.Confronta per riferimento?
La mia domanda è: c'è un modo di confrontare Lista per riferimento se uguale è sovrascritto? Il codice qui sotto vi rimuovere la voce dalla lista:
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;
}
}
}
Diciamo che io sono in grado di rimuovere l'attuazione SomeClass' di uguali, c'è un modo di fare la lista confronta con riferimento al posto del valore?
Grazie, sembra funzionare bene. – haiyyu