Против объекта IList и IEnumerable для коллекций на лиц


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

2 139

2 ответа:

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

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

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

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