如果从未发生yield return,则返回null吗?

时间:2010-08-06 19:37:10

标签: c# ienumerable yield-return

该方法通过yield return语句返回IEnumerable。

如果yield语句永远不会发生(它在条件逻辑中),方法是返回null,还是返回计数为0的Enumerable?

3 个答案:

答案 0 :(得分:17)

一个有效的IEnumerable,当你遍历它时不会产生任何值。

想一想:你可以将IEnumerable生成器存储在一个变量中 - 当你实际遍历结果时,代码本身就会被执行。如果你有null,你怎么能执行代码?或者你如何知道该函数在没有运行的情况下不会产生任何结果。

答案 1 :(得分:8)

后者 - 无论如何,你都可以GetEnumerator(),不会有任何枚举的项目。这相当于Enumerable.Empty<T>

答案 2 :(得分:2)

事实上,那些倾向于大量使用枚举的编码员会在他们的工具包中有一个标准的部分:

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

在System.Linq.Enumerable.Empty()出现之前。在很多情况下非常有用,通常正是因为它不返回null。例如,如果GetIntEnum()可以返回某种IEnumerable类型但也可以返回null,那么GetIntEnum() ?? Enumerable.Empty<T>()给我们一些总是可以安全地枚举的东西(假设在null结果的情况下是所需的behviour)。