作者:lovely月夜静悄悄知_302 | 来源:互联网 | 2022-11-27 19:43
我正在学习引擎盖下的迭代器模式,所以最终我可以在某些类中使用它.这是一个测试类:
public class MyGenericCollection : IEnumerable
{
private int[] _data = { 1, 2, 3 };
public IEnumerator GetEnumerator()
{
foreach (int i in _data)
{
yield return i;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
我对这IEnumerable.GetEnumerator()
部分很困惑.在我运行的代码测试中,它从未被引用或使用,但我必须让它来实现泛型IEnumerable
.
我确实理解IEnumerable
继承自IEnumerator
,所以我必须实现两者.
除此之外,当使用非通用接口时我很困惑.在调试中它永远不会进入.谁能帮我理解?
1> Jon Skeet..:
我对IEnumerable.GetEnumerator()部分感到困惑.在我运行的代码测试中,它从未被引用或使用过,但我必须让它来实现通用的IEnumerable.
任何使用你的类型的东西都可以使用它IEnumerable
.例如:
IEnumerable collection = new MyGenericCollection();
// This will call the GetEnumerator method in the non-generic interface
foreach (object value in collection)
{
Console.WriteLine(value);
}
只有一些LINQ方法也可以调用它:Cast
和OfType
:
var castCollection = new MyGenericCollection().OfType();