Ich möchte einen Sammlungsinitialisierer für das nächste Codebit verwenden:
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;
}
Normalerweise sollte es so etwas sein wie:
return new Dictionary<int, string>
{
1, "Adam",
2, "Bart"
...
Aber wie lautet die richtige Syntax dafür?
Antworten:
quelle
Dictionary<TKey, TValue>
Unterklassen oder wird es auch funktionierenICollection<KeyValuePair<TKey, TValue>>
?var
anstelle des deklarierenden Typs verwenden, oder wenn Sie den deklarierenden Typ verlassen, können Sie dennew Dictio...
- stackoverflow.com/questions/5678216/…var
spart buchstäblich nur Tastatureingaben, es ist implizit stark typisiert .var
und der Wiederholung mitSomeType obj = new SomeType...
. Und da Sie nicht deklarieren können,var obj;
ohne sofort zu initialisieren, sehe ich das Problem einfach nicht. Wirklich, ich versuche zu lernen, aber ich kann Ihre Position nicht verbessern.Die Syntax ist etwas anders:
Beachten Sie, dass Sie effektiv Tupel von Werten hinzufügen.
Als Randnotiz: Auflistungsinitialisierer enthalten Argumente, die im Grunde genommen Argumente für jede Add () - Funktion sind, die in Bezug auf den Argumenttyp zur Kompilierungszeit nützlich ist. Das heißt, wenn ich eine Sammlung habe:
Der folgende Code ist völlig legal:
quelle
IEnumerable
und enthältAdd()
.Add
.IEnumerable<T>
und eineAdd
Methode hat. Wenn dieAdd
Methode 3 Parameter akzeptiert, benötigen Sie 3 Objekte in den Klammern.quelle
Die Frage ist markiert
c#-3.0
, aber der Vollständigkeit halber erwähne ich die neue Syntax, die mit C # 6 verfügbar ist, falls Sie Visual Studio 2015 (oder Mono 4.0) verwenden:Hinweis: Die in anderen Antworten erwähnte alte Syntax funktioniert jedoch immer noch, wenn Ihnen das besser gefällt. Der Vollständigkeit halber hier noch einmal die alte Syntax:
Eine andere coole Sache ist, dass Sie mit jeder Syntax das letzte Komma lassen können, wenn Sie möchten, was das Kopieren / Einfügen zusätzlicher Zeilen erleichtert. Zum Beispiel kompiliert das Folgende ganz gut:
quelle
Wenn Sie nach einer etwas weniger ausführlichen Syntax suchen, können Sie eine Unterklasse von
Dictionary<string, object>
(oder was auch immer Ihr Typ ist) wie folgt erstellen :Dann initialisiere einfach so
Welches ist gleichbedeutend mit
Der Vorteil besteht darin, dass Sie alle kompilierten Inhalte erhalten, die Sie möglicherweise benötigen, z
is DebugKeyValueDict
anstattis IDictionary<string, object>
oder Ändern der Typen des Schlüssels oder Werts zu einem späteren Zeitpunkt. Wenn Sie so etwas auf einer Rasiermesser-cshtml-Seite tun, ist es viel schöner anzusehen.
Sie sind nicht nur weniger ausführlich, sondern können dieser Klasse auch zusätzliche Methoden hinzufügen, für was auch immer Sie möchten.
quelle
Im folgenden Codebeispiel wird a
Dictionary<TKey, TValue>
mit Instanzen vom Typ initialisiertStudentName
.von msdn
quelle
Ja, wir können den Sammlungsinitialisierer im Wörterbuch verwenden. Wenn wir ein Wörterbuch wie dieses haben,
Wir können es wie folgt initialisieren.
quelle