【问题标题】:If yield return never occurs, is null returned?如果 yield return 从未发生,是否返回 null?
【发布时间】:2011-03-26 12:33:42
【问题描述】:

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

如果 yield 语句从未出现(它在条件逻辑中),该方法将返回 null,还是返回一个计数为 0 的 Enumerable?

【问题讨论】:

    标签: c# ienumerable yield-return


    【解决方案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&lt;T&gt;() 为我们提供了一些始终可以安全枚举的内容(假设在 null 结果的情况下这是所需的行为)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-20
          • 1970-01-01
          • 2013-11-17
          • 2017-01-09
          • 2012-04-09
          • 1970-01-01
          • 2012-10-24
          • 2015-09-01
          相关资源
          最近更新 更多