IList<T> не наследует IList, где IEnumerable<out T> наследует IEnumerable.
Если модификатор out является единственной причиной, то почему большая часть реализации IList<T> (например, Collection<T>, List<T>) реализует интерфейс IList.
Итак, любой может сказать "ОК", если эти утверждения верны для всей реализации IList<T>, а затем при необходимости направить его на IList. Но проблема в том, что хотя IList<T> не наследует IList, поэтому не гарантируется, что каждый объект IList<T> IList.
Кроме того, использование IList<object>, очевидно, не является решением, потому что без out генераторы-генераторы не могут быть назначены классу less inherit; и создание нового экземпляра List не является решением здесь, потому что кому-то может понадобиться фактическая ссылка IList<T> в качестве указателя IList; и использование List<T> insteed IList<T> на самом деле является плохой практикой программирования и не служит целям.
Если .NET хочет предоставить гибкость в том, что каждая реализация IList<T> не должна иметь контракт с нестандартной реализацией (т.е. IList), то почему они не сохранили другой интерфейс, который реализует как общие, так и не общие и не предполагал, что весь конкретный класс, который хочет заключить контракт на родовой и негенический элемент, должен сжиматься через этот интерфейс.
Такая же проблема возникает при литье ICollection<T> в ICollection и IDictionary<TKey, TValue> в IDictionary.