Это может быть старый вопрос: почему IEnumerable<T> наследует от IEnumerable?
Вот как это делает .NET, но это приносит небольшую проблему. Каждый раз, когда я пишу класс, реализует IEumerable<T>, я должен написать две функции GetEnumerator(), одну для IEnumerable<T>, а другую для IEnumerable.
И, IList<T> не наследуется от IList.
Я не знаю, почему IEnumerable<T> создан другим способом.