Если возвращение дохода не происходит, возвращается ли значение null? - PullRequest
13 голосов
/ 06 августа 2010

Метод возвращает IEnumerable с помощью оператора return yield.

Если оператор yield никогда не встречается (он находится внутри условной логики), будет ли метод возвращать ноль или он будет возвращать Enumerable со счетчиком 0?

Ответы [ 3 ]

17 голосов
/ 06 августа 2010

Действительный IEnumerable, который не выдает значений при итерации по нему.

Только подумайте: вы можете хранить генератор IEnumerable в переменной - сам код выполняется только тогда, когда вы фактически просматриваете результаты. Как вы могли бы выполнить код, если у вас был null? Или как вы узнали , что функция ничего не дает без ее запуска.

8 голосов
/ 06 августа 2010

Последнее - вы сможете GetEnumerator(), несмотря ни на что, просто не будет элементов для перечисления. Это эквивалентно Enumerable.Empty<T>.

2 голосов
/ 07 августа 2010

Действительно, кодеры 2.0, склонные к интенсивному использованию перечислений, имеют в своем наборе стандартный элемент:

public static IEnumerable<T> EmptyEnum<T>()
{
    yield break;
}

До появления System.Linq.Enumerable.Empty (). Очень полезно во многих случаях, довольно часто именно потому, что не возвращает ноль. Например, если GetIntEnum () может возвращать некоторый тип IEnumerable, но также может возвращать ноль, то GetIntEnum() ?? Enumerable.Empty<T>() дает нам что-то, что всегда безопасно перечислять (при условии, что это желаемый результат в случае нулевых результатов). *

...