C#中的GetEnumerator()
方法可用于实现自定义迭代器。它基本上是 .NET 迭代器的基础,并且为 LINQ 提供了一个极好的风格。
GetEnumerator()
方法概述
GetEnumerator()
方法返回一个实现了 IEnumerator
接口的对象。这个接口定义了当前集合中某个位置的元素,以及如何在一个集合中移动以访问其他元素。
实现方式
要实现自己的迭代器,您需要执行以下操作:
- 创建一个类,它实现了
IEnumerable
接口。 - 实现
GetEnumerator()
方法,使其返回实现了IEnumerator
接口的迭代器对象。 - 在实现的迭代器对象中实现
MoveNext()
、Reset()
和Current
属性。
这里是一个示例实现:
public class MyCollection : IEnumerable
{
private int[] items = new int[5] { 1, 2, 3, 4, 5 };
public IEnumerator GetEnumerator()
{
return new MyIterator(items);
}
private class MyIterator : IEnumerator
{
private int[] items;
private int position = -1;
public MyIterator(int[] items)
{
this.items = items;
}
public bool MoveNext()
{
if (position < items.Length - 1)
{
position++;
return true;
}
else
{
return false;
}
}
public void Reset()
{
position = -1;
}
public object Current
{
get { return items[position]; }
}
}
}
在这个示例中,我们创建了一个简单的数组,并将其包装在一个自定义的 MyIterator
对象中。它实现了 IEnumerator
接口,因此它可以被用作 IEnumerable 接口的实现。
示例
下面是一个使用 MyCollection
的示例:
MyCollection collection = new MyCollection();
foreach (int item in collection)
{
Console.WriteLine(item);
}
这将输出集合中的所有元素:
1
2
3
4
5
除了这个示例, 还可以使用其他类型如 List
、Dictionary
等来实现自定义迭代器。只需创建一个实现 GetEnumerator()
方法的类,返回一种可枚举的类型,遵循上述的框架就可以创建自己的迭代器了。
总之,在 C# 中,GetEnumerator()
方法以及相关的 IEnumerable
和 IEnumerator
接口,是实现自定义迭代器的基本组成部分,它可以帮助开发人员以更加美观和具有可读性的方式处理集合和序列。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# GetEnumerator():返回 IEnumerator 对象,它可用于循环访问集合中的元素 - Python技术站