【发布时间】:2013-09-01 03:26:02
【问题描述】:
我正在尝试实现迭代器模式。 基本上,据我了解,它使一个类“foreachble”,并且通过不向用户透露确切的集合类型来使代码更加安全。
我一直在尝试,我发现如果我实施 IEnumerator GetEnumerator() 在我的课堂上,我得到了想要的结果......似乎免除了实现接口的麻烦。
这里是我的意思的一瞥:
public class ListUserLoggedIn
{
/*
stuff
*/
public List<UserLoggedIn> UserList { get; set; }
public IEnumerator<UserLoggedIn> GetEnumerator()
{
foreach (UserLoggedIn user in this.UserList)
{
yield return user;
}
}
public void traverse()
{
foreach (var item in ListUserLoggedIn.Instance)
{
Console.Write(item.Id);
}
}
}
我想我的问题是,这是一个有效的迭代器示例吗? 如果是,为什么这是有效的,我该怎么做才能使迭代器通过“var”只返回一个部分或一个匿名对象。 如果不是,正确的方法是什么...
【问题讨论】:
-
你的代码看起来没问题,不是吗?
-
它有效...但是为什么呢?我认为设计模式应该有更多的内容......
-
设计模式只是解决某个设计问题的方法。有时问题可以通过像这样的小改动或单例来解决。
-
框架中内置了“为什么”。一个设计决定。虽然不是绝对需要实现
IEnumerable<>,但它肯定是一个好主意(仅对 Linq 来说)。 -
好的,但我无法理解幕后发生的事情。我作为枚举器返回的究竟是什么?,当我转到 IEnumerator 定义时,我看到“T Current { get; } " 但是下一步和重置呢?
标签: c# iterator ienumerable ienumerator