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。

bannerAds