Al trabajar con la clase List de System.Collections.Generic, los métodos como Contains o IndexOf compararán el objeto de referencia pasado utilizando el método Equals implementado desde IEquatable, o el método Equals reemplazado proporcionado por la clase Object. Si Object.Equals no se reemplaza, comprobará si la referencia aprobada apunta al mismo objeto que él.Comparar por referencia?
Mi pregunta es: ¿Hay alguna manera de hacer que la Lista se compare por referencia si se anula Igual? El código siguiente se eliminará el elemento de la 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;
}
}
}
Digamos que soy incapaz de eliminar la aplicación de Iguales SomeClass', hay una manera de hacer la lista de comparación por referencia en lugar del valor?
Gracias, eso parece funcionar bien. – haiyyu