Подтвердить что ты не робот

Какие преимущества инициализаторы словаря добавляют к инициализаторам коллекции?

В недавнем прошлом было много разговоров о том, что нового в С# 6.0
Одна из наиболее обсуждаемых функций - использование инициализаторов Dictionary в С# 6.0
Но подождите, что мы использовали инициализаторы коллекции для инициализации коллекций и можем очень хорошо инициализировать Dictionary также в .NET 4.0 и .NET 4.5 (не знаю о старой версии), например

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

Итак, что нового в С# 6.0, какой словарь инициализатор они говорят в С# 6.0

4b9b3361

Ответ 1

Пока вы можете инициализировать словарь с инициализаторами коллекции, это довольно громоздко. Особенно для чего-то, что должно быть синтаксическим сахаром.

Инициализаторы словарей намного чище:

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

Ответ 2

Новый создает словарь таким образом

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"
    };

Взято из Предварительный просмотр языка С# 6.0

Чтобы понять оператор $, взгляните на вызов функции AreEqual. Обратите внимание на вызов члена словаря "$ Boolean" в переменной builtInDataTypes, даже несмотря на то, что в словаре не существует логический элемент. Такой явный член не требуется, потому что оператор $вызывает индексированный член в словаре, эквивалент вызова buildInDataTypes [ "Boolean" ].