Jak wstawiać wartości do słownika C # podczas tworzenia wystąpienia?


149

Czy ktoś wie, czy istnieje sposób, w jaki mogę wstawiać wartości do słownika C # podczas jego tworzenia? Mogę, ale nie chcę, zrobić dict.Add(int, "string")dla każdego elementu, jeśli istnieje coś wydajniejszego, na przykład:

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

Odpowiedzi:


199

Jest cała strona o tym, jak to zrobić:

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

Przykład:

W poniższym przykładzie kodu a Dictionary<TKey, TValue>jest inicjowany z wystąpieniami typu 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
Działa to tylko na kompilatorze .NET 3.5 ... po prostu miej to na uwadze.
Adrian

@ kd7iwp - nie ma problemu, część funkcji tej witryny polega na tym, że alternatywne wyszukiwane hasła mogą być kierowane do czegoś pożytecznego.
Daniel Earwicker

Tak, to jest dość oczywiste w przypadku Microsoftu. Przez lata byli bardzo zaangażowani w kompatybilność wsteczną.
PRMan

46
Dictionary<int, string> dictionary = new Dictionary<int, string> { 
   { 0, "string" }, 
   { 1, "string2" }, 
   { 2, "string3" } };

13

Już prawie byłeś:

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

10

Możesz również użyć wyrażeń Lambda, aby wstawić dowolne pary klucz-wartość z dowolnego innego obiektu IEnumerable. Klucz i wartość mogą być dowolnego typu.

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

Uważam, że jest to o wiele prostsze, ponieważ obiekty IEnumerable są używane wszędzie w .NET

Mam nadzieję, że to pomoże !!!

Berbeć.


7

Możesz utworzyć instancję słownika i dodawać do niego elementy w następujący sposób:

var dictionary = new Dictionary<int, string>
    {
        {0, "string"},
        {1, "string2"},
        {2, "string3"}
    };

7

Abyś wiedział, od C # 6 możesz teraz zainicjować go w następujący sposób

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

Dużo czystsze :)


-1

Mam nadzieję, że będzie działać idealnie.

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


Cześć, witaj w SO! Osoba, która pierwotnie zadała to pytanie, wyraźnie powiedziała, że ​​nie chce stosować .Add(int, "string")metody dodawania wartości do słownika. Przepraszamy, ale to nie odpowiada na pytanie.
Kezz101

-2

Generalnie nie jest to zalecane, ale w czasach niepewnych kryzysów możesz użyć

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"];
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.