Это стандартное преобразование интерфейса; как требование, массивы (T[]
) реализуют IEnumerable
и IEnumerable<T>
. Таким образом, string[]
на 100% совместим с IEnumerable<T>
. Реализация обеспечивается компилятором (массивы были в основном родовыми до того, как существовали дженерики .NET).
Из спецификации (ECMA 334 v4) - это следствие 13.1.4:
- От одномерного массива типа
S[]
до System.Collections.Generic.IList<S>
и основания
интерфейсы этого интерфейса.
- От одномерного массива типа
S[]
до System.Collections.Generic.IList<T>
и базовых интерфейсов этого интерфейса, при условии неявного преобразования ссылок из S
в T
.
И помните, что IList<T> : IEnumerable<T>