2010-09-22 11 views
50

Bardzo łatwe dzisiaj, myślę. W języku C#:Dodaj klucze/wartości do słownika na deklaracji

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

Ale w vb poniższe nie działa.

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

Jestem pewien, że istnieje sposób na dodanie ich w deklaracji, ale nie jestem pewien jak. I tak, chcę dodać je w deklaracji, nie w żadnym innym czasie. :) Mam nadzieję, że to możliwe. Dziękuję wszystkim.

Próbowałem również:

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

I ...

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

I ...

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

Odpowiedz

81

Jest to możliwe w VB.NET 10:

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

Niestety IIRC VS 2008 używa VB.NET 9 kompilatora, który nie obsługuje tej składni.

A dla tych, którzy mogą być zainteresowani oto co się dzieje za kulisami (C#):

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

porządku! Zastanawiam się, jak się to zachowuje, czy najpierw tworzy dwuwymiarową tablicę, a potem kopiuje do słownika? – vulkanino

+0

Dern. Więc mówisz, że skoro używam VS2008, nie mogę tego zrobić? Te stinkies. – XstreamINsanity

+1

Yeap, trochę śmierdzący :-) Czas na upgrade. –

0

nie ma konstruktora wziąć KeyValuePair do słownika.

8

Jest tak samo, użyj Od słów kluczowych:

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

, wymaga to jednak wersja 10 języka, dostępna w VS2010.

7

Oto fajne tłumaczenie: Możesz również mieć ogólny słownik łańcuchów i ciągów znaków.

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

Chłodny haa :)