IList <T> против IEnumerable <T>. Что более эффективно IList <T> или IEnumerable <T>
Что более эффективный способ вернуть методы IList<T>
или IEnumerable<T>
?
IEnumerable<T>
это неизменяемая коллекция, но IList<T>
изменчива и содержит много полезных методов и свойств.
Чтобы отбрасывать IList<T>
в IEnumerable<T>
, это просто копия справки:
IList<T> l = new List<T>();
IEnumerable<T> e = l;
Чтобы отбрасывать IEnumerable<T>
в List<T>
, нам нужно выполнить итерацию каждого элемента или вызвать метод ToList()
:
IEnumerable<T>.ToList();
или может передать конструктор IEnumerable<T>
в List<T>
, который выполняет ту же самую итерацию где-то внутри своего конструктора.
List<T> l = new List<T>(e);
Какие случаи вы считаете более эффективными? Что вы предпочитаете больше в своей практике?
Ответы
Ответ 1
Что касается эффективности, как интерфейсы, поэтому эффективность будет зависеть от фактического конкретного класса, который вы возвращаете. Как правило, вы всегда должны возвращать тип, самый высокий в иерархии объектов, который работает для потребителей этого метода. В вашем случае IEnumerable<T>
. Если потребителям класса необходимо добавить элементы, получить доступ к элементам по индексу, удалить элементы, которые вам лучше использовать, используя IList<T>
.
Так как всегда в программировании: это зависит: -)