c# - Yield 的目的是什么,它是如何工作的?

标签 c# yield-return

在浏览 Twitter 时,我发现了一位游戏开发者的推文,我关注了他刚才所说的内容;

@ChevyRay 2:44 AM - 5 Jul 2016
i give you: the stupidest 8 lines of code i’ve ever written that is actually used by my game’s code

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

我立即看着它,心想这是做什么的?我确定该帖子是开玩笑,但我只是不明白。所以我去研究了yield但这并没有真正回答我的问题。

我想知道这里是否有人可以首先阐明它在做什么以及为什么。

最佳答案

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

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

结果

1
-1

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

参见 yield keyword获取更多信息。

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


由于张贴者是一名游戏开发者,他可能使用这两个值作为方向指示器,并使用此枚举来枚举所有可能的方向或类似的东西。

关于c# - Yield 的目的是什么,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38200654/

相关文章:

c# - 使用 C#,如何以编程方式创建新的 Visual Studio 2012 解决方案?

c# - Func 或 Predicate 到 ExpressionTree

c# - 无法使用 yield return 打印到控制台

c# - 在 C# 中使用 yield return 迭代器的目的/优势是什么?

c# - 使用嵌套方法时奇怪的执行顺序,yield return 和组合使用

c# - 为什么调用 Enumerable.First() 似乎返回枚举中第一项的副本

c# - MySqlDataReader.GetSchemaTable ColumnOrdinal 是实际数据的+1

c# - 何时正确释放 Outlook COM 对象?

c# - 转换为VB后, 'is an event and cannot be called directly.'

c# - C#中 "yield"关键字有什么用?