うら干物書き

ゲームを作りたい!

【C#,LINQ】ToList~シーケンスからリストを作りたいとき~

 C#のLINQの関数であるToList()の使い方についてです。
 配列やリストなどのシーケンスからリストを作ることが出来ます。
f:id:urahimono:20180701235434p:plain


この記事には.NET Framework 4.6.1を使用しています。

リストを作る!

 リストが欲しい!
 手元に配列やIEnumerable<T>はあるけど、俺が欲しいのはList<T>なんだ!
 そんなときはLINQToList()を使うことで、願望をかなえることが出来ます。

public static List<TSource> ToList<TSource>( this IEnumerable<TSource> source );
Enumerable.ToList(TSource) メソッド (IEnumerable(TSource)) (System.Linq)

 使い方は簡単で、IEnumerable<T>を継承したクラスがToList()を呼ぶだけ。

Program.cs

using System.Linq;
using System.Collections;
using System.Collections.Generic;

public static class Program
{
    static void Main( string[] args )
    {
        // いろんなデータを……。
        List<float>         dataA   = new List<float>() { 0.1f, 2.3f, 6.7f };
        IEnumerable<int>    dataB   = Enumerable.Range( 0, 10 );
        string[]            dataC   = new string[] { "正一郎", "清次郎", "誠三郎", "征史郎" };

        // 全部リストに変えちゃえ!
        List<float>     listA  = dataA.ToList();
        List<int>       listB  = dataB.ToList();
        List<string>    listC  = dataC.ToList();

        // 結果発表
        System.Console.WriteLine( "dataA:{0}", dataA.Text() );
        System.Console.WriteLine( "listA:{0}", listA.Text() );

        System.Console.WriteLine( "dataB:{0}", dataB.Text() );
        System.Console.WriteLine( "listB:{0}", listB.Text() );

        System.Console.WriteLine( "dataC:{0}", dataC.Text() );
        System.Console.WriteLine( "listC:{0}", listC.Text() );

        // 入力待ち用
        System.Console.ReadKey();
    }

    /// <summary>
    /// 簡易的なシーケンスのテキスト取得処理
    /// </summary>
    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }

} // class Program

dataA:[0.1], [2.3], [6.7],
listA:[0.1], [2.3], [6.7],
dataB:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
listB:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
dataC:[正一郎], [清次郎], [誠三郎], [征史郎],
listC:[正一郎], [清次郎], [誠三郎], [征史郎],

 List<T>からList<T>を作る事だってできちゃいます。
 是非ともToList()を七兆回ほど使って、世の中をリストだらけにしてみてください。

LINQのリンク