ho una distinta dichiarazione LINQ() che utilizza il mio operatore di confronto personalizzato, in questo modo:Utilizzare un delegato per il confronto di uguaglianza per di LINQ distinte()
class MyComparer<T> : IEqualityComparer<T> where T : MyType
{
public bool Equals(T x, T y)
{
return x.Id.Equals(y.Id);
}
public int GetHashCode(T obj)
{
return obj.Id.GetHashCode();
}
}
...
var distincts = bundle.GetAllThings.Distinct(new MyComparer<MySubType>());
Questo è tutto bene e dandy e lavora come ho volere. Per curiosità, devo definire il mio Comparatore o posso sostituirlo con un delegato? Ho pensato che dovrei essere in grado di fare qualcosa del genere:
var distincts = bundle.GetAllThings.Distinct((a,b) => a.Id == b.Id);
Ma questo non viene compilato. C'è un trucco pulito?
Dovresti avere un 'ReferenceEquals' controlli contro nulla su' 'x' e y' nel vostro' implementazione Equals'. – nicodemus13