IList <T>против IEnumerable <T>. Что является более эффективным IList <T>или IEnumerable <T> - PullRequest
13 голосов
/ 21 августа 2010

Какой более эффективный способ заставить методы возвращать 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 Ответ

21 голосов
/ 21 августа 2010

Что касается эффективности, то оба являются интерфейсами, поэтому эффективность будет зависеть от конкретного конкретного класса, который вы возвращаете.Как правило, вы всегда должны возвращать тип, который является наивысшим в иерархии объектов, который работает для потребителей этого метода.В вашем случае IEnumerable<T>.Если потребителям класса нужно добавить элементы, получить доступ к элементам по индексу, удалить элементы, которые вам лучше, используя IList<T>.

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

...