web-dev-qa-db-ja.com

辞書初期化子は、コレクション初期化子に比べてどのような利点がありますか?

最近では、C#6.0の新機能について多くの議論がありました。
最も話題になっている機能の1つは、C#6.0でDictionary初期化子を使用することです
ただし、コレクション初期化子を使用してコレクションを初期化しているので、.NET 4.0および.NET 4.5(古いバージョンについては知らない)でもDictionaryを初期化できます。

Dictionary<int, string> myDict = new Dictionary<int, string>() {
    { 1,"Pankaj"},
    { 2,"Pankaj"},
    { 3,"Pankaj"}
};

C#6.0の新機能、C#6.0で話している辞書初期化子

47
Pankaj

couldでコレクション初期化子を使用して辞書を初期化できますが、非常に面倒です。特に、構文糖質であると思われる何かのために。

辞書イニシャライザはよりクリーンです:

var myDict = new Dictionary<int, string>
{
    [1] = "Pankaj",
    [2] = "Pankaj",
    [3] = "Pankaj"
};

さらに重要なことは、これらのイニシャライザは辞書専用ではなく、インデクサをサポートするオブジェクトに使用できます。たとえば、List<T>

var array = new[] { 1, 2, 3 };
var list = new List<int>(array) { [1] = 5 };
foreach (var item in list)
{
    Console.WriteLine(item);
}

出力:

1
5
3
75
i3arnon

新しい方法で辞書を作成しています

Dictionary<int, string> myDict = new Dictionary<int, string>() {
    [1] = "Pankaj",
    [2] = "Pankaj",
    [3] = "Pankaj"
};

<index> = <value>のスタイル

廃止:文字列インデックス付きメンバー構文(コメントに記載されているとおり)

Dictionary<int, string> myDict = new Dictionary<int, string>() {
        $1 = "Pankaj",
        $2 = "Pankaj",
        $3 = "Pankaj"
    };

C#6.0言語プレビュー から取得

$演算子を理解するには、AreEqual関数呼び出しを見てください。ディクショナリに「ブール」メンバーがない場合でも、builtInDataTypes変数の「$ブール」のディクショナリメンバー呼び出しに注意してください。 $演算子はディクショナリのインデックス付きメンバーを呼び出すため、このような明示的なメンバーは必要ありません。これはbuildInDataTypes ["Boolean"]を呼び出すのと同等です。

0
Jehof