Why does ICollection<T> implement both IEnumerable<T> and IEnumerable?
What is the purpose of this? How does IEnumerable benefit ICollection<T>?
IEnumerable<T> itself forces any implementation to also implement the non-generic IEnumerable. This is safe, for the same reasons that IEnumerable<out T> is covariant as of .NET 4... you can always convert the T to object for the non-generic form.
Basically this means that if you've got code which uses a parameter of type IEnumerable, you can still call it with something like List<T>.
Eric Lippert wrote a blog post recently about why collections end up implementing many interfaces, and Brad Abrams wrote a blog post back in 2005 about the specific IEnumerable<T>/IEnumerable decision.
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