El método de comparación en Linq le permite buscarlo con un IEqualityComparer, pero no puedo encontrar un método de contrapartida que le permita recuperar un artículo del mismo comparador.Cómo obtener un objeto de una lista basada en IEqualityComparer <T>
¿Es esta la mejor manera de hacerlo?
MyItem myFinderItem = new MyItem(keyField1, keyField2);
if (myList.Contains(myFinderItem, new MyEqualityComparer()))
{
MyItem myRealItem = myList.Single(item => new MyEqualityComparer().Equals(item , myFinderItem));
}
(estoy compartiendo el uso de la IEqualityComaprer con una llamada al método Excepto LINQ y me gustaría mantener una única fuente para las comparaciones de igualdad)
Editar: Lo que estoy buscando por un método que tiene la firma:
T Find<T>(T t, IEqualityComparer<T> comparer)
Edit2: Supongo que esto funciona,
es moderno
. pero es horrible y nunca lo utilizaría :(
myList.Intersect(new List<MyItem>{myFinderItem}, comparer).Single();
¿Qué comportamiento espera si no se encuentra el elemento? – R0MANARMY
@ R0MANARMY: Realmente no me importa, ya sea devolver nulo o tirar estaría bien. – Greg
Puede que también le interese esta pregunta (diferencia entre usar 'Simple' y usar' First') http://stackoverflow.com/questions/2724096/linq-single-vs-first – R0MANARMY