Як вставити значення в Словник C # про інстанціювання?


149

Хтось знає, чи є спосіб, коли я можу вставити значення у словник C #, коли я створюю його? Я можу, але не хочу робити це dict.Add(int, "string")для кожного предмета, якщо є щось більш ефективне, наприклад:

Dictionary<int, string>(){(0, "string"),(1,"string2"),(2,"string3")};

Відповіді:


199

Тут є ціла сторінка про те, як це зробити:

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



10

Ви також можете використовувати лямбдаські вирази, щоб вставити будь-які пари ключових значень з будь-якого іншого об'єкта IEnumerable. Ключ і значення можуть бути будь-якого типу.

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

Я вважаю це набагато простішим, оскільки ви використовуєте об'єкти IEnumerable скрізь у .NET

Сподіваюся, що допомагає !!!

Тад.


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

Набагато чистіше :)


-1

Сподіваюсь, це буде справно працювати.

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


Привіт, ласкаво просимо до SO! Людина, яка спочатку задала це питання, конкретно сказала, що не хоче використовувати .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"];
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.