2010-09-22 18 views
50

Hoy es muy fácil, creo. En C#, es:Agregue claves/valores al diccionario en la declaración

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

Pero en vb, lo siguiente no funciona.

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

Estoy bastante seguro de que hay una manera de agregarlos en la declaración, pero no estoy seguro de cómo. Y sí, quiero agregarlos en la declaración, no en ningún otro momento. :) Así que con suerte es posible. Gracias a todos.

También he intentado:

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

Y ...

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

Y ...

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

Respuesta

81

Esto es posible en VB.NET 10:

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

Desafortunadamente IIRC VS 2008 utiliza VB.NET 9 compilador que no soporta esta sintaxis.

Y para aquellos que pudieran estar interesados ​​aquí es lo que pasa detrás de las escenas (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

bien! Me pregunto cómo se comporta eso, ¿construye primero el arreglo bidimensional y luego lo copia al diccionario? – vulkanino

+0

Dern. Entonces, ¿estás diciendo que, dado que estoy usando VS2008, no puedo hacerlo? Eso apesta. – XstreamINsanity

+1

Yeap, un poco apestoso :-) Es hora de actualizar. –

0

hay ningún constructor para tomar una KeyValuePair de un diccionario.

8

Es casi de la misma, utilice la palabra clave FROM:

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

Sin embargo, esto requiere versión 10 del idioma, disponible en VS2010.

7

Aquí hay una traducción interesante: también puede tener un diccionario genérico de cadenas y matriz de cadenas.

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

fresca haa :)

Cuestiones relacionadas