Как вставить значения в словарь C # при создании экземпляра?

150

Кто-нибудь знает, есть ли способ вставить значения в словарь C # при его создании? Я могу, но не хочу делать dict.Add(int, "string")для каждого элемента, если есть что-то более эффективное, например:

Dictionary<int, string>(){(0, "string"),(1,"string2"),(2,"string3")};
kd7iwp
источник

Ответы:

200

Здесь есть целая страница о том, как это сделать:

http://msdn.microsoft.com/en-us/library/bb531208.aspx

Пример:

В следующем примере кода a Dictionary<TKey, TValue>инициализируется с экземплярами типа StudentName:

var students = new Dictionary<int, StudentName>()
{
    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}},
    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}},
    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}
};
Дэниел Уорвикер
источник
3
Это работает только на компиляторе .NET 3.5, хотя ... просто имейте это в виду.
Адриан Годонг
@ kd7iwp - нет проблем, функция этого сайта заключается в том, что альтернативные поисковые термины могут быть направлены на что-то полезное.
Даниэль Эрвикер
Да, это в значительной степени дано Microsoft. Они были довольно привержены обратной совместимости на протяжении многих лет.
PRMan
46
Dictionary<int, string> dictionary = new Dictionary<int, string> { 
   { 0, "string" }, 
   { 1, "string2" }, 
   { 2, "string3" } };
Тимоти Картер
источник
13

Вы были почти там

var dict = new Dictionary<int, string>()
{ {0, "string"}, {1,"string2"},{2,"string3"}};
Хенк Холтерман
источник
10

Вы также можете использовать лямбда-выражения для вставки любых пар Key Value из любого другого объекта IEnumerable. Ключ и значение могут быть любого типа, который вы хотите.

Dictionary<int, string> newDictionary = 
                 SomeList.ToDictionary(k => k.ID, v => v.Name);

Я считаю, что гораздо проще, так как вы используете объекты IEnumerable везде в .NET

Надеюсь, это поможет!!!

Тэд.

matendie
источник
7

Вы можете создать словарь и добавить в него элементы следующим образом:

var dictionary = new Dictionary<int, string>
    {
        {0, "string"},
        {1, "string2"},
        {2, "string3"}
    };
Джозеф
источник
7

Точно так же, как вы знаете, как в C # 6 теперь вы можете инициализировать его следующим образом

var students = new Dictionary<int, StudentName>()
{
    [111] = new StudentName {FirstName="Sachin", LastName="Karnik", ID=211},
    [112] = new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317},
    [113] = new StudentName {FirstName="Andy", LastName="Ruth", ID=198}
};

Намного чище :)

russelrillema
источник
-1

Надеюсь, это будет работать отлично.

Dictionary<string, double> D =new Dictionary<string, double>(); D.Add("String", 17.00);


источник
Привет, добро пожаловать на ТАК! Человек, который первоначально задал этот вопрос, специально сказал, что он не хочет делать .Add(int, "string")метод добавления значений в словарь. Извините, но это не отвечает на вопрос.
Kezz101
-2

Обычно это не рекомендуется, но во время неопределенных кризисов вы можете использовать

Dictionary<string, object> jsonMock = new Dictionary<string, object>() { { "object a", objA }, { "object b", objB } };

// example of unserializing
ClassForObjectA anotherObjA = null;
if(jsonMock.Contains("object a")) {
    anotherObjA = (ClassForObjA)jsonMock["object a"];
}
Jacksonkr
источник