Подтвердить что ты не робот

Если доход возврата никогда не возникает, возвращается null?

Метод возвращает IEnumerable с помощью инструкции return yield.

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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