【发布时间】:2011-09-02 10:08:25
【问题描述】:
我正在开发一个集合类,它应该实现 IEnumerator 和 IEnumerable。
在我的第一种方法中,我直接实现了它们。现在我发现了 yield 关键字,并且我已经能够用一个只读属性 Values 替换 IEnumerator/IEnumerable 接口,该属性使用 yield 在循环中返回一个 IEnumerable。
我的问题:是否可以在不实现 IEnumerable/IEnumerator 的情况下以迭代类本身的方式使用 yield?
即,我想要一个类似于框架集合的功能:
List<int> myList = new List<int>();
foreach (int i in myList)
{
...
}
这可能吗?
更新:看来我的问题措辞不当。我不介意实现 IEnumerator 或 IEnumerable;我只是认为唯一的方法是使用旧的 Current/MoveNext/Reset 方法。
【问题讨论】:
-
我想不出任何理由这是个好主意。我缺乏想象力吗? IEnumerator 不是一个复杂或繁重的接口。
-
@Jodrell:让事情变得更简单不是一个好主意吗?为什么?
-
你为什么认为你的收藏应该实现
IEnumerator<T>? -
更简单几乎总是更好,但我无法想象比 IEnumerator 的实现更简单的答案。
-
嗯...对不起,伙计们,我认为使用 yield 来实现 IEnumerable 是不可能的。不实现 IEnumerator 或 IEnumerable 并不是真正的要求,我只是想要一些比旧的 Current/Reset/MoveNext 更简单的东西,这让我在调用之间保持状态,除了最简单的事情之外可能非常麻烦。
标签: c# .net ienumerable yield ienumerator