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

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

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

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

想一想:你可以将IEnumerable生成器存储在一个变量中 – 当你实际迭代结果时,代码本身就会被执行。 如果你有null你怎么能执行代码? 或者你怎么知道这个函数没有运行就没有产生任何东西。

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

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

 public static IEnumerable EmptyEnum() { yield break; } 

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