Я хочу использовать инициализатор коллекции для следующего фрагмента кода:
public Dictionary<int, string> GetNames()
{
Dictionary<int, string> names = new Dictionary<int, string>();
names.Add(1, "Adam");
names.Add(2, "Bart");
names.Add(3, "Charlie");
return names;
}
Обычно это должно быть примерно так:
return new Dictionary<int, string>
{
1, "Adam",
2, "Bart"
...
Но каков правильный синтаксис для этого?
Ответы:
источник
Dictionary<TKey, TValue>
подклассов или тоже будет работатьICollection<KeyValuePair<TKey, TValue>>
?var
вместо объявляющего типа, или если оставить объявляющий тип, можете опуститьnew Dictio...
- stackoverflow.com/questions/5678216/…var
буквально просто экономит нажатия клавиш, он неявно строго типизирован .var
и повторениемSomeType obj = new SomeType...
. А поскольку вы не можете объявитьvar obj;
без немедленной инициализации, я просто не вижу проблемы. На самом деле, я пытаюсь учиться, но не могу понять твою позицию.Синтаксис немного отличается:
Обратите внимание, что вы эффективно добавляете кортежи значений.
В качестве примечания: инициализаторы коллекций содержат аргументы, которые в основном являются аргументами любой функции Add (), которая может пригодиться в отношении типа аргумента времени компиляции. То есть, если у меня есть коллекция:
следующий код совершенно законен:
источник
IEnumerable
и имеетAdd()
методы.Add
.IEnumerable<T>
и имеетAdd
метод. ЕслиAdd
метод принимает 3 параметра, то вам понадобится 3 объекта в скобках.источник
Вопрос отмечен тегами
c#-3.0
, но для полноты я упомяну новый синтаксис, доступный в C # 6, если вы используете Visual Studio 2015 (или Mono 4.0):Примечание: старый синтаксис, упомянутый в других ответах, все еще работает, если вам это больше нравится. Опять же, для полноты, вот старый синтаксис:
Еще одна интересная вещь, на которую следует обратить внимание, заключается в том, что с любым синтаксисом вы можете оставить последнюю запятую, если хотите, что упрощает копирование / вставку дополнительных строк. Например, следующее прекрасно компилируется:
источник
Если вы ищете немного менее подробный синтаксис, вы можете создать подкласс
Dictionary<string, object>
(или любого другого типа) следующим образом:Затем просто инициализируйте вот так
Что эквивалентно
Преимущество заключается в том, что вы получаете все, что вам нужно, например, возможность сказать
is DebugKeyValueDict
вместо тогоis IDictionary<string, object>
или изменить типы ключа или значения позже. Если вы делаете что-то подобное на странице razor cshtml, это намного приятнее.
Помимо того, что вы менее подробны, вы, конечно, можете добавить в этот класс дополнительные методы для всего, что вам нужно.
источник
В следующем примере кода a
Dictionary<TKey, TValue>
инициализируется экземплярами типаStudentName
.из msdn
источник
Да, мы можем использовать инициализатор коллекции в словаре. Если у нас есть такой словарь -
Мы можем инициализировать его следующим образом.
источник