Il metodo Confronto in Linq consente di trovare da un IEqualityComparer, ma non riesco a trovare un metodo di contropartita che consente di recuperare un elemento dallo stesso comparatore.Come ottenere un oggetto da un elenco basato su IEqualityComparer <T>
È davvero il modo migliore per farlo?
MyItem myFinderItem = new MyItem(keyField1, keyField2);
if (myList.Contains(myFinderItem, new MyEqualityComparer()))
{
MyItem myRealItem = myList.Single(item => new MyEqualityComparer().Equals(item , myFinderItem));
}
(sto condividendo l'uso del IEqualityComaprer con una chiamata al metodo Tranne Linq e vorrei mantenere una singola fonte per confronti di uguaglianza)
Edit: Quello che sto cercando per un metodo che ha la firma:
T Find<T>(T t, IEqualityComparer<T> comparer)
Edit2: Credo che questo funziona,
è funky
. ma è orribile e non avrebbe mai usarlo :(
myList.Intersect(new List<MyItem>{myFinderItem}, comparer).Single();
Che comportamento ti aspetti se l'elemento non viene trovato? – R0MANARMY
@ R0MANARMY: Non ha importanza per me, o restituire null o throw andrebbe bene. – Greg
Questa domanda potrebbe anche interessarti (differenza tra l'uso di 'Single' e l'uso di' Primo') http://stackoverflow.com/questions/2724096/linq-single-vs-first – R0MANARMY