Обратите внимание, что не может быть никакого метода экземпляра, потому что IEnumerable
является ковариантным.
Все, что имеет тип IEnumerable<string>
, должно реализовывать IndexOf(string x)
, и, благодаря ковариации, может быть приведено к IEnumerable<object>
.
Таким образом, теперь он выставляется как IndexOf(object x)
, что на самом деле IndexOf(string x)
, и поскольку не все objects
являются strings
, он не может работать для всех объектов.
IList
может сделать это, потому что это инвариант, то есть вы не можете разыграть IList<string>
в IList<object>
.