在仔细阅读推特的同时,我发现游戏开发者发了一条推文,我跟着说了这句话;
@ChevyRay 2:44 AM - 5 Jul 2016
我给你:我写过的最愚蠢的8行代码,实际上是我的游戏代码所使用的static IEnumerable<int> RightAndleft { get { yield return 1; yield return -1; } }
我立刻看着它,心里想着这是做什么的?我确定这个帖子是一个玩笑,但我还没有得到它。因此,我去研究yield
,但这并没有真正回答我的问题。
我想知道这里是否有人可以先了解一下它在做什么以及为什么。
答案 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}}对象。