Yield的目的是什么?它是如何工作的?

时间:2016-07-05 10:08:24

标签: c# yield-return

在仔细阅读推特的同时,我发现游戏开发者发了一条推文,我跟着说了这句话;

  

@ChevyRay 2:44 AM - 5 Jul 2016
  我给你:我写过的最愚蠢的8行代码,实际上是我的游戏代码所使用的

     
static IEnumerable<int> RightAndleft
{
    get
    {
        yield return 1;
        yield return -1;
    }
}

我立刻看着它,心里想着这是做什么的?我确定这个帖子是一个玩笑,但我还没有得到它。因此,我去研究yield,但这并没有真正回答我的问题。

我想知道这里是否有人可以先了解一下它在做什么以及为什么。

2 个答案:

答案 0 :(得分:5)

编译器将此代码转换为枚举器。您可以使用此枚举器迭代序列{1, -1}

foreach(var i in ClassName.RightAndLeft)
    Console.WriteLine(i);

结果

1
-1

请注意,此属性有两个return语句并返回类型int。它会返回一个IEnumerable<int>,一个包含1-1的序列。

有关详细信息,请参阅yield keyword

需要注意的一个重要部分是第二行yield return -1;在之后执行在此示例中Console.WriteLine打印出第一个值。

由于海报是游戏开发者,他可能会使用这两个值作为方向指示符,这个枚举可以列举所有可能的方向或类似的东西。

答案 1 :(得分:1)

它返回包含 final Stack<Integer> ms = new Stack<Integer>(); ms.add(0); ms.add(0); ms.add(0); ms.add(1); ms.add(1); ms.add(1); ms.add(3); ms.add(56); System.out.println("Before clean:\n" + ms); final Set<Integer> s = new HashSet<Integer>(Collections.list(ms.elements())); ms.clear(); ms.addAll(s); System.out.println("After clean:\n" + ms); IEnumerable<int>的{​​{1}}对象。

请参阅https://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx