[ C# ] コレクション初期化子 ( List / Dictionary の初期化 )

Pocket

List クラスや Dictionary クラスを始めとするコレクションの初期化についてのサンプルを掲載しています。コレクションの初期化方法も VisualStudio や C# のバージョンアップとともにより簡潔に記述できるように進化しています。

スポンサーリンク

C# VS2005でのコレクションの初期化

C# VS2005で、コレクションを初期化するサンプルになります。

    //----------------------------------------------
    // Listクラス
    //----------------------------------------------

    // インスタンスを生成し、アイテムを追加する方法
    List<string> list1 = new List<string>();
    list1.Add("Item1");
    list1.Add("Item2");

    // コンストラクタに引数を与え、アイテムを追加する方法
    string[] items = {"Item1", "Item2"};
    List<string> list2 = new List<string>(items);

    //----------------------------------------------
    // Dictionaryクラス
    //----------------------------------------------

    // インスタンスを生成し、アイテムを追加する方法
    Dictionary<int, String> dect1 = new Dictionary<int, String>();
    dect1.Add(0, "Item1");
    dect1.Add(1, "Item2");

    // コンストラクタに引数を与え、アイテムを追加する方法
    //(dect1がコピーされる)
    Dictionary<int, String> dect2 = new Dictionary<int, String>(dect1);

上記の初期化方法は非常にわかりやすいと思います。ただ、Dectionary クラスのコンストラクタでの初期化 については、純粋な初期化とはいえないような気もします。

C# VS2008でのコレクションの初期化

C# VS2008において、コレクションの初期化はインスタンス生成と初期化を1行で記述できるようになりました。

    // -----------------------------------------------
    // Listクラス
    // -----------------------------------------------

    // インスタンス生成と初期化を同時に行う
    List<int> list3 = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    List<string> list4 = new List<string> { "0", "1" };

    //----------------------------------------------
    // Dictionaryクラス
    //----------------------------------------------
    // インスタンス生成と初期化を同時に行う
    Dictionary<int, String> dect3 = new Dictionary<int, String> { 
                                                        { 0, "item1" }, 
                                                        { 1, "item2" } 
                                        };

VisualStudio2008 で、.NetFramework2.0 を使用するプロジェクト設定でも、上記のサンプルは問題なくコンパイルおよび実行されます。.NetFramework3.0 の機能ではなく VS2008 の新機能であることがわかります。

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *