web-dev-qa-db-fra.com

Ajouter des clés / valeurs au dictionnaire lors de la déclaration

Très facile aujourd'hui, je pense. En C #, c'est:

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

Mais en vb, ce qui suit ne fonctionne pas.

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

Je suis sûr qu'il existe un moyen de les ajouter lors de la déclaration, mais je ne sais pas comment. Et oui, je veux les ajouter à la déclaration, pas à tout autre moment. :) Donc j'espère que c'est possible. Merci tout le monde.

J'ai aussi essayé:

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

Et...

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

Et...

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

Cela est possible dans VB.NET 10:

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

Malheureusement, IIRC VS 2008 utilise le compilateur VB.NET 9 qui ne prend pas en charge cette syntaxe.

Et pour ceux qui pourraient être intéressés, voici ce qui se passe dans les coulisses (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;
104
Darin Dimitrov

C'est à peu près la même chose, utilisez le mot clé From:

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

Cependant, cela nécessite la version 10 de la langue, disponible dans VS2010.

12
Hans Passant

Voici une traduction intéressante: vous pouvez également avoir un dictionnaire générique de chaînes et un tableau de chaînes.

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

Cool haa :)

9
Mike

Il n'y a pas de constructeur pour prendre un KeyValuePair pour un dictionnaire.

1
vulkanino