什么是收益?什么是在asp.net中使用收益的好处?

问题描述:

你能帮我理解yield关键字asp.net(C#)什么是收益?什么是在asp.net中使用收益的好处?

收益率自动为您创建一个枚举器。

http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx

所以,你可以这样做

//pseudo code: 

while(get_next_record_from_database) 
{ 
    yield return your_next_record; 
} 

它可以让你快速创建一个对象集合(一个枚举),您可以通过循环和检索记录。 yield return语句处理为您创建枚举器所需的所有代码。

yield return语句的很大一部分是,在将集合返回给调用方法之前,您不必加载集合中的所有项目。它允许收集lazy loading,所以你不会一次支付访问惩罚。

何时使用Yield Return

yield用作语法糖,用于从一个方法返回一个IEnumerable<T>IEnumerator<T>对象,而无需实现您自己的实现这些接口的类。

+0

??为什么downvotes?我错了吗? – spoulson 2010-07-07 13:48:39

+0

是的,因为它不同于自己创建IEnumerable并返回它。 – 2010-07-07 13:50:09

+2

这个答案没有错。 – 2010-07-07 13:53:05

yield允许您发出一个IEnumerable,您通常会返回更具体的类型(如IList)。

This is a pretty good example of how it can simplify your code and clarify your intent。至于你在哪里使用它,你需要遍历一个集合的页面上的任何地方,你可能会使用一个返回IEnumerable来代替List/Dictionary /等的方法。

产量远远超过了合成糖或创建IEnumerables的简单方法。

欲了解更多信息,我会看看贾斯汀埃里奇的博客has a great article explaining more advanced usages of yield

+0

绝对如此。直到你完全理解它是如何为你创建状态机的,你才能完全理解“产出”。它非常强大。 – 2010-07-07 13:54:23

+0

该死的帮助。我知道这是旧的,但这个帖子真的为我做了。 – Terrance 2010-08-12 14:37:32

我写了一个简单的例子,展示了如何在收集的访问周期中调用yield块。看看here