IList против IEnumerable для коллекций на сущности

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

Ответ 1

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

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

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

Ответ 2

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