如果yield yield从不发生,返回null?
问题描述:
该方法通过yield return语句返回IEnumerable。如果yield yield从不发生,返回null?
如果yield语句永远不会发生(它在条件逻辑中),那么该方法是否会返回null,或者它是否会返回计数为0的Enumerable?
答
一个有效的IEnumerable,它在遍历它时不会产生任何值。
想一想:您可以将IEnumerable生成器存储在一个变量中 - 当您实际遍历结果时,代码本身会被执行。如果你有null
,你如何执行代码?或者你怎么知道该函数没有运行它就不会产生任何东西。
答
后者 - 你将能够GetEnumerator()
无论如何,那里就没有任何项目可以枚举。这相当于Enumerable.Empty<T>
。
答
事实上,2.0程序员谁对大量使用枚举倚将在他们的工具箱标准件:
public static IEnumerable<T> EmptyEnum<T>()
{
yield break;
}
System.Linq.Enumerable.Empty()之前走过来。在很多情况下非常有用,通常正是因为它不返回null。例如,如果GetIntEnum()可以返回某种类型的IEnumerable类型,但也可以返回null,那么GetIntEnum() ?? Enumerable.Empty<T>()
会给我们一些总是安全可以枚举的东西(假设这是空结果所期望的行为)。