c#でのIEnumerableの使い方は何ですか?
C#では、IEnumerableは、コレクションを列挙できる型を表すインターフェースです。このインターフェースは、GetEnumerator() メソッドを定義しており、コレクションの要素を繰り返し処理するために、IEnumerator インターフェースを実装したオブジェクトを返します。
IEnumerableインターフェースを使用すると、カスタムのコレクションクラスを作成し、foreachステートメントなどでそれを反復処理することができます。GetEnumerator()メソッドを実装することで、コレクション内の要素と現在の位置を移動する方法を含むIEnumeratorオブジェクトを返すことができます。
IEnumerableを使用したコードの例示です。
public class MyCollection : IEnumerable
{
private int[] data;
public MyCollection()
{
// 初始化集合数据
data = new int[] { 1, 2, 3, 4, 5 };
}
// 实现IEnumerable接口的GetEnumerator方法
public IEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
}
public class MyEnumerator : IEnumerator
{
private int[] data;
private int position = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// 实现IEnumerator接口的MoveNext方法
public bool MoveNext()
{
position++;
return (position < data.Length);
}
// 实现IEnumerator接口的Reset方法
public void Reset()
{
position = -1;
}
// 实现IEnumerator接口的Current属性
public object Current
{
get
{
return data[position];
}
}
}
// 使用自定义的集合类进行遍历
MyCollection collection = new MyCollection();
foreach (int num in collection)
{
Console.WriteLine(num);
}
上記の例では、MyCollectionクラスはIEnumerableインターフェースを実装し、IEnumeratorインターフェースを実装したMyEnumeratorオブジェクトを返します。foreachループでは、MyCollectionオブジェクトを反復処理し、その要素を出力することができます。
C#内也存在泛型版本的IEnumerable接口(IEnumerable),需要特别注意。这个版本更常用,允许指定集合中元素的类型。泛型版本的IEnumerable接口类似于非泛型版本,但返回的IEnumerator对象是IEnumerator类型,Current属性的类型也是T。