Skip to content

C# 6 の新機能でインデックスを指定してコレクションを初期化する

C# 6 の新機能 のひとつに『インデックスを指定してコレクションの初期化が出来るようになった』というものがあります。従来と比べてコードが短くなるわけではありませんが、より直感的にコレクションの初期化を書けるようになりました。

従来の書き方

比較用に従来の方法で記載したサンプルコードを記載します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;

namespace OldWay
{
    class Program
    {
        static void Main(string[] args)
        {
            var Numbers = new Dictionary<int, string>
            {
                {1, "one" },
                {3, "three" },
                {5, "five" }
            };
            foreach (var Number in Numbers)
                Console.WriteLine(Number);
        }
    }
}

実行結果は以下の通りです。

1
2
3
4
> OldWay.exe
[1, one]
[3, three]
[5, five]

C# 6 での書き方サンプル

C# 6 では以下のように書くことが出来ます。コレクションの初期化を「インデックス = 値」という書き方が出来、直感的で分かりやすくなっています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;

namespace IndexInitializers
{
    class Program
    {
        static void Main(string[] args)
        {
            var Numbers = new Dictionary<int, string>
            {
                [1] = "one",
                [3] = "three",
                [5] = "five"
            };
            foreach (var Number in Numbers)
                Console.WriteLine(Number);
        }
    }
}

以下の通り、実行結果そのものは従来の書き方と同じです。しかし、「二重括弧が不要であること」「イコールを使った表現が出来ること」から記載がシンプルで直感的になり、可読性の向上・バグ発生率の低減等が期待出来ます。

1
2
3
4
> IndexInitializers.exe
[1, one]
[3, three]
[5, five]