Какие преимущества инициализаторы словаря добавляют к инициализаторам коллекции?
В недавнем прошлом было много разговоров о том, что нового в С# 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
Ответы
Ответ 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" ].