【发布时间】:2011-07-31 06:09:48
【问题描述】:
我已通读C# 3.0 in a Nutshell 的迭代器/枚举器部分数次,但我仍然很难掌握它。从他们的名字来看,我最初的想法是 Iterator 会迭代一组 Enumerable 对象。我在正确的轨道上吗?如果是这样,那么常见的泛型集合呢,比如List<T>? List 在其某些操作期间是否创建/使用迭代器? T 是自动可枚举的吗?有演员表吗?一个甚至与另一个有什么关系吗?
在一些相关的说明中,在学习 MVC 时,我看到过这样的代码:
public Article GetArticle(int id)
{
return _siteDB.Articles.SingleOrDefault(a => a.ArticleID == id);
}
public IEnumerable<Article> GetArticle(string title)
{
return _siteDB.Articles.Where(a => a.Title.StartsWith(title)).AsEnumerable<Article>();
}
返回类型为IEnumerable<T> 会给我带来什么?
编辑:好的,我想我开始明白了。我的困惑仍然是迭代器。本书将它们描述为枚举器的生产者。我看不出yield return 实际发生在哪里。每个 yield 都会创建一个新的 Enumerator 吗?
【问题讨论】:
标签: asp.net-mvc-2 iterator ienumerable enumerable