【问题标题】:"yield" return different type?“产量”返回不同的类型?
【发布时间】:2019-03-12 23:05:48
【问题描述】:

假设我们有以下代码:

public IEnumerator FirstTest()
{
   yield return 1;
}

public IEnumerable SecondTest()
{
    yield return 1;
}

我知道代码没有逻辑,但它是有效的,那么为什么“yield”可以返回不同的类型,FirstTest 返回一个 IEnumerator,SecondTest 返回一个 IEnumerable? IEnumerator和IEnumerable之间没有继承关系

【问题讨论】:

  • 别忘了编译器很聪明。从IEnumerator 中获取IEnumerable 有明显、简单且通用的解决方案。

标签: c# interface


【解决方案1】:

根据C# Language definition of yield return两者都有效

迭代器的声明必须满足以下要求:

返回类型必须是IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>

声明不能有任何 in ref 或 out 参数。

【讨论】:

    【解决方案2】:

    迭代器函数可以返回 Enumerable、IEnumerable、IEnumerator 或 IEnumerator。接口之间的关系在这里无关紧要,因为这是一种语言特性。

    来自the documentation

    迭代器的声明必须满足以下要求:

    • 返回类型必须是 IEnumerable、IEnumerable、IEnumerator 或 IEnumerator。
    • 声明不能有任何 in ref 或 out 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-22
      • 2013-09-28
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      相关资源
      最近更新 更多