Ни один.
Если вам нужен перечислитель и у вас уже есть базовый тип IEnumerable
(List
реализует IList
, который расширяет IEnumerable
), просто верните его следующим образом:
public IEnumerator<SomeType> GetEnumerator ()
{
return _list.GetEnumerator();
}
В противном случае, если вам действительно нужен список, то есть произвольный доступ с использованием индексов, тогда верните IList
; и если вы действительно хотите вернуть его внутренний тип реализации, то есть List
, вы можете просто сделать его доступным свойством. Однако обратите внимание, что частный сеттер не предотвращает изменение списка (добавление или удаление элементов и т. Д.). Если вы этого хотите, верните вместо этого список только для чтения:
public IList<SomeType> List
{
get { return _list.AsReadOnly(); }
}
Что касается доходности
не могли бы вы показать мне реальное доказательство использования доходности?
yield return
полезно, когда у вас действительно есть генератор, когда вам действительно нужно сгенерировать следующий элемент. Простым примером может служить генератор случайных чисел, который предоставляет вам другое случайное число, если вы продолжаете его спрашивать. Этому не обязательно есть конец, но вы можете не знать количество чисел до начала.
Другое распространенное использование - это все, что извлекает данные из какого-либо внешнего источника. Например, список элементов из веб-сервиса. Прежде чем вы не знаете, сколько элементов есть, и вы не обязательно знаете, сколько элементов вы на самом деле хотите (поскольку вы, возможно, захотите отобразить его на бесконечном дисплее, показывая по одному). В этом случае вы могли бы сделать это так:
IEnumerable<Item> GetItems()
{
while (Service.HasMorePages())
{
foreach (Item item in Service.GetNextPage())
{
yield return item;
}
}
yield break;
}
GetNextPage
всегда будет возвращать список из N
элементов за раз, и вы получите следующий, когда захотите больше элементов, чем вы уже получили.
person
poke
schedule
22.11.2012
List<T>
уже естьGetEnumerator
реализация ??? - person Jodrell   schedule 22.11.2012yield return
? - person Jodrell   schedule 22.11.2012