【发布时间】:2011-03-26 12:33:42
【问题描述】:
该方法通过 yield return 语句返回 IEnumerable。
如果 yield 语句从未出现(它在条件逻辑中),该方法将返回 null,还是返回一个计数为 0 的 Enumerable?
【问题讨论】:
标签: c# ienumerable yield-return
该方法通过 yield return 语句返回 IEnumerable。
如果 yield 语句从未出现(它在条件逻辑中),该方法将返回 null,还是返回一个计数为 0 的 Enumerable?
【问题讨论】:
标签: c# ienumerable yield-return
一个有效的 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>() 为我们提供了一些始终可以安全枚举的内容(假设在 null 结果的情况下这是所需的行为)。
【讨论】: