[C#] イテレータの使い方 [VB.NET]

[C#] イテレータの使い方 [VB.NET]

イテレータとは

英語で iterate は、繰り返しを意味します。つまりイテレータは「繰り返すためのもの」、みたいな意味でしょうか。

イテレータは、C#(.NET Framework)では列挙子と呼ばれ、IEnumeratorインターフェイスによってあらわされます。
イテレータを使うことで、コレクションクラスに対し要素を列挙することができるようになります。
つまり簡単に言うとforeach構文で処理できるようになるということです。

foreach構文は利用者側からは便利ですが、実装側はIEnumerableやIEnumeratorインターフェースの実装が必要になり、少々面倒です。
イテレータ構文を使用することで、これらインターフェースの実装する手間を省き、要素の列挙ができるようになります。

イテレータ構文(C#)

イテレータ構文は C#2.0 から 利用できる構文で、メソッドやプロパティ(get)のブロック内で return の代わりに
yield return を 使用することで、列挙される値を返すことができます。

foreach構文、yield returnを使用したサンプルを以下に記します。

using System;
using System.Collections.Generic;
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1-10まで列挙する
            foreach (var item in GetList(10))
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

        // 1から引数までの値を返すイテレータ
        static public IEnumerable<int> GetList(int end)
        {
            for (int i = 1; i <= end; i++)
            {
                yield return i;
            }
        }
    }
}

イテレータ構文(VB.NET)

イテレータ構文(VB.NET)では単純にIteratorキーワードをFunctionの前に付け、Yieldステートメントを使って値を返します。

Sub Main()
    For Each n In MyIterator()
        Console.WriteLine(n)
    Next
    Console.Read()
End Sub

' 1から10までのイテレータ
Private Iterator Function MyIterator() As IEnumerable(Of Integer)
    For n = 1 To 10
        Yield n
    Next
End Function

このようにイテレータを使うことで反復処理の記述が容易になります。

参考サイト

C#カテゴリの最新記事