If I have a (reference - does it matter?) type MyType which does not override the Equals method, what heuristics will be used when determining if an ICollection<MyType> contains a given instance of the type?
What's the best way to use my own heuristics (e.g. check for the equality of the Id property value)?
Because your type doesn't override Equals, the default implementation of Equals will be used, i.e. reference equality. So Contains will be true if the collection contains that very instance.
To use your own comparison, implement IEqualityComparer<T>
(e.g. to compare the Ids) and pass an instance of your comparer into the Contains method. (This assumes you are able to use LINQ extensions, as the "native" ICollection<T>.Contains
method doesn't have the IEqualityComparer overload.)
It's not defined by ICollection<T>
- different implementations can use different methods. From MSDN:
Implementations can vary in how they determine equality of objects; for example,
List<T>
usesComparer<T>.Default
, whereasDictionary<TKey, TValue>
allows the user to specify theIComparer<T>
implementation to use for comparing keys
In most cases it will just compare the references, but you should check the documentation for the specific ICollection<T>
you are using.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With