Why does ICollection
implement both IEnumerable
and IEnumerable
?
What is the purpose of this? How does
IEnumerable
itself forces any implementation to also implement the non-generic IEnumerable
. This is safe, for the same reasons that IEnumerable
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
.
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
/IEnumerable
decision.