IList vs IEnumerable для коллекций объектов - PullRequest
145 голосов
/ 18 декабря 2008

Когда в моем домене есть объекты со списками вещей, должны ли они быть представлены как ILists или IEnumerables? Например. В заказе есть куча OrderLines.

Ответы [ 2 ]

182 голосов
/ 18 декабря 2008

IEnumerable<T> представляет серию элементов, которые вы можете перебирать (например, с помощью foreach), тогда как IList<T> - это коллекция, которую вы можете добавлять или удалять с.

Как правило, вы хотите иметь возможность изменять ордер, добавляя или удаляя в нем OrderLines, поэтому вы, вероятно, хотите, чтобы Order.Lines был IList<OrderLine>.

.

Сказав это, вы должны принять некоторые решения по проектированию фреймворка. Например, можно ли добавить один и тот же экземпляр OrderLine в два разных заказа? Возможно нет. Таким образом, учитывая, что вы захотите проверить, следует ли добавлять OrderLine в заказ, вы действительно можете отобразить свойство Lines только как IEnumerable<OrderLine> и предоставить методы Add (OrderLine) и Remove (OrderLine). который может обрабатывать эту проверку.

24 голосов
/ 14 сентября 2009

Большую часть времени я заканчиваю тем, что перехожу к IList вместо IEnumerable, потому что IEnumerable не имеет метода Count и вы не можете получить доступ к коллекции через индекс (хотя, если вы используете LINQ, вы можете обойти это с помощью методов расширения ).

...