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>.

Так как всегда в программировании: это зависит: -)