【问题标题】:Is it possible to use Yield keyword to return values without a loop?是否可以使用 Yield 关键字在没有循环的情况下返回值?
【发布时间】:2013-07-03 06:42:01
【问题描述】:

我没有for 循环,我想从一个方法返回 5 个整数。这可能吗?能给我举个例子吗?

我想一个接一个地返回值。我搜索了很多示例,但它们都显示了使用 for 循环返回 yield 值的方法,并且一些解释说,没有循环就无法使用 yield 关键字。

【问题讨论】:

  • 一次全部 5 个?还是一个接一个?
  • -1。你没有研究任何东西,你的需求解释得很差。请改进问题(例如,添加更多上下文、真实示例等)。

标签: c# .net keyword


【解决方案1】:

是的,绝对的:

public IEnumerable<int> GetValues()
{
    yield return 10;
    yield return 5;
    yield return 15;
    yield return 23;
    yield return 1;
}

yield return 语句之间也可以有其他代码。尽管迭代器块中的代码有一些限制,但您可以大部分使用正常的代码结构——循环、条件等。

另一方面,如果您不需要任何其他代码,为什么不只返回一个列表或数组(或类似的东西)?

public IEnumerable<int> GetValues()
{
    return new int[] { 10, 5, 15, 23, 1 };
}

如果您有更具体的要求,请给我们更多详细信息。

【讨论】:

    【解决方案2】:

    没关系:

    IEnumerable<int> myFunc()
    {
        yield return 1;
        yield return 1;
        yield return 1;
        yield return 1;
        yield return 42;
    }
    

    e:打败我吧......为了侮辱伤害,我注意到我的代码只返回了四个整数。 BRB,去喝咖啡。

    【讨论】:

      【解决方案3】:

      是的,有可能,您可以使用 yield 关键字返回多个值,而无需使用 for 循环,
      下面是一个很好的例子:

      // yield-example.cs
      using System;
      using System.Collections;
      public class List
      {
         IEnumerable <int> MyMethod()
          {
      
                  yield return result1 ; 
                  yield return result2 ; 
                  yield return result5 ; 
                  yield return result6; 
      
          }
      }
      

      【讨论】:

        【解决方案4】:

        我想从方法中返回 5 个整数

        您只需要out 参数:

         void MyMethod(out int a, out int b, out int c)  { a = 1; b = 2; c = 3; }
        
         int x, y, z;
         MyMethod(out x, out y, out z);
        

        【讨论】:

        • 这对问题的解释与我所看到的完全不同,但仔细研究后同样有效。虽然在这一点上,@Jon Skeet 上面关于只返回一个数组的建议似乎具有相同的结果,而且开销更少。
        • 数组版本更接近yield版本。
        猜你喜欢
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 2019-03-11
        • 2012-09-23
        • 1970-01-01
        相关资源
        最近更新 更多