对于yield关键字我们首先看一下msdn的解释:
如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法、运算符或 get 访问器是迭代器。 通过使用 yield 定义迭代器,可在实现自定义集合类型的 [url=https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.aspx]IEnumerable [/url]和 [url=https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.aspx]IEnumerator [/url]模式时无需其他显式类(保留枚举状态的类,有关示例,请参阅 [url=https://msdn.microsoft.com/zh-cn/library/78dfe2yb.aspx]IEnumerator<T>[/url])。
[b]yield是一个语法糖[/b]
看msdn 的解释总是让人感觉生硬难懂。其实yield关键字很好理解。首先我们对于性质有个了解。yield是一个语法糖。既然yield是在C#中的一个语法糖,那么就说明yield是对一种复杂行为的简化,就是将一段代码简化为一种简单的形式,方便我们程序员使用。
那么yield到底是对什么行为的简化。我们首先来看一下yield的使用场景。
还是来看msdn上的例子。
[url=http://www.1sucai.cn/article/63856.htm]具体的例子可以看Artech博主的文章[/url]
另外使用yield还有一些注意事项:
你不能在具有以下特点的方法中包含 yield return 或 yield break 语句:
匿名方法。 有关详细信息,请参阅匿名方法([url=https://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx]C# 编程指南[/url])。
包含不安全的块的方法。 有关详细信息,请参阅unsafe([url=https://msdn.microsoft.com/zh-cn/library/chfa2zb8.aspx]C# 参考[/url])。
[b]异常处理[/b]
不能将 yield return 语句置于 try-catch 块中。 可将 yield return 语句置于 try-finally 语句的 try 块中。
yield break 语句可以位于 try 块或 catch 块,但不能位于 finally 块。
如果 foreach 主体(在迭代器方法之外)引发异常,则将执行迭代器方法中的 finally 块。