C# 泛型 IEnumerable
C# Generic IEnumerable
我正在深入了解迭代器模式,因此最终我可以在某些 classes 中使用它。这是一个测试 class:
public class MyGenericCollection : IEnumerable<int>
{
private int[] _data = { 1, 2, 3 };
public IEnumerator<int> GetEnumerator()
{
foreach (int i in _data)
{
yield return i;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
我对 IEnumerable.GetEnumerator()
部分感到困惑。在我 运行 的代码测试中,它从未被引用或使用过,但我必须使用它来实现通用 IEnumerable
.
我明白 IEnumerable<T>
继承自 IEnumerator
,所以我必须实现两者。
除此之外,当使用非通用接口时,我感到很困惑。在调试中它从未进入。谁能帮我理解一下?
I'm confused on the IEnumerable.GetEnumerator() section. In the code tests that I've ran, it's never referenced or used, but I have to have it to implement the generic 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<int>();
我正在深入了解迭代器模式,因此最终我可以在某些 classes 中使用它。这是一个测试 class:
public class MyGenericCollection : IEnumerable<int>
{
private int[] _data = { 1, 2, 3 };
public IEnumerator<int> GetEnumerator()
{
foreach (int i in _data)
{
yield return i;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
我对 IEnumerable.GetEnumerator()
部分感到困惑。在我 运行 的代码测试中,它从未被引用或使用过,但我必须使用它来实现通用 IEnumerable
.
我明白 IEnumerable<T>
继承自 IEnumerator
,所以我必须实现两者。
除此之外,当使用非通用接口时,我感到很困惑。在调试中它从未进入。谁能帮我理解一下?
I'm confused on the IEnumerable.GetEnumerator() section. In the code tests that I've ran, it's never referenced or used, but I have to have it to implement the generic 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<int>();