MSDN.WhiteKnight - Stack Overflow answers
Ответ на "В чем разница в массивах IEnumerable<T> и List<T>?"
Answer 970141
Здесь, как я понял происходит то, что t2 ссылаться на новый объект IEnumerable с аналогичными значениями
Тип времени выполнения в обоих случаях одинаковый - List. Более того, даже если заменить
var ...
наIEnumerable<int> ...
, ничего не изменится, тип времени выполнения останется тем же, так как метод ToList всегда возвращает объект типа List. (Кроме того, объект просто не может иметь тип IEnumerable, так как экземпляр интерфейса создать нельзя.)Чтобы убедиться на практике, выполните код:
List<int> listValues = new List<int> { 1, 2, 3 }; var t1 = listValues.ToList(); Console.WriteLine(t1.GetType()); IEnumerable<int> listValues2 = new List<int> { 1, 2, 3 }; var t2 = listValues2.ToList(); Console.WriteLine(t2.GetType()); IEnumerable<int> listValues3 = new List<int> { 1, 2, 3 }; IEnumerable<int> t3 = listValues3.ToList(); Console.WriteLine(t3.GetType());
Он выведет
System.Collections.Generic.List`1[System.Int32] System.Collections.Generic.List`1[System.Int32] System.Collections.Generic.List`1[System.Int32]
Чтобы все-таки получить тип времени выполнения, отличный от List, можно реализовать метод-итератор:
static IEnumerable<int> Foo(List<int> list) { for (int i = 0; i < list.Count; i++) yield return list[i]; }
Тогда
var t4 = Foo(listValues); Console.WriteLine(t4.GetType());
Выведет имя автоматически сгенерированного компилятором типа-итератора (у меня
ConsoleApplication1.Program+<Foo>d__0
)
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.