C#の「IEnumerable」型の変数について

「IEnumerable<T>」型は、ジェネリック(汎用)インターフェースで、要素を順番に列挙するための機能を提供します。

どのような機能を規定したインターフェースか

具体的には、配列やリスト、セットなどのコレクションに対して、要素を1つずつ順番に取り出し処理を行うことができます。また、LINQ(Language Integrated Query)などのクエリ言語を用いて、データを抽出したり、条件に合致する要素を検索したりすることもできます。

宣言と代入のサンプル

「IEnumerable<T>」型の変数は、列挙可能なオブジェクト(IEnumerable)のインスタンスを表します。ジェネリックなので、型引数Tには、列挙する要素の型を指定します。例えば、以下のように宣言することができます。

IEnumerable<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };

この場合、変数numbersは、int型の要素を列挙可能なList<int>のインスタンスを指します。numbersを用いて、forループやLINQクエリを実行することができます。

実際のListクラスのシグネチャ(実装の本体部分の1行目)

public class List<T> : IEnumerable<T>

サンプル

以下は、int型の要素を持つList<T>のインスタンスを作成し、IEnumerable<T>型の変数を用いて、要素を1つずつ取り出して処理を行う例です。

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // int型の要素を持つList<T>のインスタンスを作成
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

        // IEnumerable<T>型の変数に代入
        IEnumerable<int> enumerableNumbers = numbers;

        // 要素を1つずつ取り出して処理を行う
        foreach (int num in enumerableNumbers)
        {
            Console.WriteLine(num * 2); // 2倍した値を出力
        }
    }
}

この例では、List<int>型の変数numbersに1~5の整数値を格納し、IEnumerable<int>型の変数enumerableNumbersに代入しています。その後、foreach文を用いて、enumerableNumbersから要素を1つずつ取り出し、2倍した値をコンソールに出力しています。結果として、以下のような出力が得られます。

2
4
6
8
10

C#

Posted by hidepon