似乎我记得一个可以实现的接口基本上有一个必须返回IEnumerable
对象的方法,并且实现此接口将允许您在对象上使用foreach
。有人可以告诉我这个界面是什么,或者如果我对此错误记忆,请纠正我吗?
所以...稍微不同的问题,但仍与我有关。
编辑:IListSource是我想到的。对于每个人都很难想到的问题。好吧,他们不可能都很好:)答案 0 :(得分:2)
IEnumerable<T> has one method to return an IEnumerator<T>
IEnumerator<T> has methods like MoveNext and Current
答案 1 :(得分:0)
具有GetEnumerator
方法的IEnumerable
(或通用等效词IEnumerable<T>
),返回IEnumerator
或IEnumerator<T>
。
当您实现该方法时,您可以在另一个集合上调用GetEnumerator
(例如,您自己类中的列表),也可以使用iterator blocks执行更多自定义迭代。
如果您遇到任何需要做的问题,请发布更多详细信息,我们可以提供更多帮助。
答案 2 :(得分:0)
实现IEnumberable
(通用IEnumberable<T>
)的对象需要实现GetEnumerator
。使用这种方法可以获得强列表IEnumerator
,如果使用IEnumberable<T>
方法,您将获得通用IEnumerator
。
IEnumerator
提供了类似
MoveNext
生成集合中的下一个项目Reset
将枚举数重置为其初始位置,该位置位于集合中的第一个元素之前。使用它可以迭代集合。
答案 3 :(得分:0)
EInumerable<T>
接口(和非泛型IEnumerable
接口)用于使类可枚举。
您可以像这样实施IEnumerable<T>
:
public class MyClass : IEnumerable<Item> {
public IEnumerator<Container<T>> GetEnumerator() {
// here you return your items, for example by returning an enumerator:
return someArray.GetEnumerator();
// or by using yield return:
for (int i = 0; i < 10; i++) {
yield return new Item(i);
}
}
// this is needed, because IEnumerable<T> inherits IEnumerable
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
// uses the generic implementation
return GetEnumerator();
}
}
foreach
语句使用duck typing而不是IEnumerable<T>
接口,因此您不需要实现接口以在foreach
语句中使用类。您只需实施GetEnumerator
方法。
答案 4 :(得分:0)
Iterator块允许您“生成T
类型的返回”对象,而不是创建实现IEnumerable<T>
的类型。例如:
IEnumerable<int> PrimesLessThanTen()
{
yield return 2;
yield return 3;
yield return 5;
yield return 7;
}
或
IEnumerable<byte> OddBytes()
{
byte b = 1;
do
{
yield return b;
b += 2;
} while (b != 1);
}