2010-09-22 10 views
50

Sehr einfach heute, denke ich. In C#, es ist:Hinzufügen von Schlüsseln/Werten zum Wörterbuch bei der Deklaration

Dictionary<String, String> dict = new Dictionary<string, string>() { { "", "" } }; 

Aber in Vb funktioniert das Folgende nicht.

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) (("","")) 

Ich bin mir ziemlich sicher, es gibt eine Möglichkeit, sie bei der Deklaration hinzuzufügen, aber ich bin mir nicht sicher, wie. Und ja, ich möchte sie bei der Erklärung hinzufügen, zu keinem anderen Zeitpunkt. :) Hoffentlich ist es möglich. Danke an alle.

habe ich auch versucht:

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) ({"",""}) 

Und ...

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) {("","")} 

Und ...

Public dict As Dictionary(Of String, String) = New Dictionary(Of String, String) {{"",""}} 

Antwort

81

Dies ist möglich in VB.NET 10:

Dim dict = New Dictionary(Of Integer, String) From {{ 1, "Test1" }, { 2, "Test1" }} 

Leider 2008 IIRC VS VB.NET 9 Compiler verwendet, die nicht diese Syntax unterstützt.

Und für diejenigen, die hier vielleicht interessiert, was hinter den Kulissen (C#) passiert:

Dictionary<int, string> VB$t_ref$S0 = new Dictionary<int, string>(); 
VB$t_ref$S0.Add(1, "Test1"); 
VB$t_ref$S0.Add(2, "Test1"); 
Dictionary<int, string> dict = VB$t_ref$S0; 
+0

fein! Ich frage mich, wie sich das verhält, baut es zuerst das zweidimensionale Array auf und kopiert es dann ins Wörterbuch? – vulkanino

+0

Dern. Sie sagen also, dass ich es nicht kann, seit ich VS2008 verwende? Das stinkt. – XstreamINsanity

+1

Yeap, ein bisschen stinkig :-) Zeit für ein Upgrade. –

0

Es gibt keinen Konstruktor ein KeyValuePair für ein Wörterbuch zu nehmen.

8

Es ist viel die gleiche, verwenden Sie das Aus Stichwort:

Dim d As New Dictionary(Of String, String) From {{"", ""}} 

Dies erfordert jedoch Version 10 der Sprache, verfügbar in VS2010.

7

Hier ist eine coole Übersetzung: Sie können auch ein Generic Dictionary von Strings und String-Array haben.

C#:

private static readonly Dictionary<string, string[]> dics = new Dictionary<string, string[]> 
     { 
      {"sizes", new string[] {"small", "medium", "large"}}, 
      {"colors", new string[] {"black", "red", "brown"}}, 
      {"shapes", new string[] {"circle", "square"}} 
     }; 

VB:

Private Shared ReadOnly dics As New Dictionary(Of String, String()) From { _ 
{"sizes", New String() {"small", "medium", "large"}}, _ 
{"colors", New String() {"black", "red", "brown"}}, _ 
{"shapes", New String() {"circle", "square"}}} 

Kühle haa :)