2009-12-30 6 views
1

Comment puis-je convertir le code C# suivant en VB.NET?Convertir ce dictionnaire C# en VB.NET

L'outil de conversion ne fonctionne pas bien.

private static readonly Dictionary<string, List<string>> ValidHtmlTags = new Dictionary<string, List<string>> { 
    { "param", new List<string>() {"name","value"}}, 
    { "object", new List<string>() {"id","type"}}, 
    { "embed", new List<string>() {"src","type","wmode"}} 
}; 

Répondre

1
Private Shared ReadOnly ValidHtmlTags As Dictionary(Of String, List(Of String)) = New Dictionary(Of String, List(Of String)) 

Ensuite, quelque part dans un sous ou une fonction:

ValidHtmlTags.Add("param", New List(Of String)) 
ValidHtmlTags("param").Add("name") 
ValidHtmlTags("param").Add("value") 

ValidHtmlTags.Add("object", New List(Of String)) 
ValidHtmlTags("object").Add("id") 
ValidHtmlTags("object").Add("type") 

ValidHtmlTags.Add("embed", New List(Of String)) 
ValidHtmlTags("embed").Add("src") 
ValidHtmlTags("embed").Add("type") 
ValidHtmlTags("embed").Add("wmode") 
+0

Merci Gabriel. Cela fonctionne très bien. – vamsivanka

+0

Je suis content que ma réponse ait résolu votre problème –

1

Il y a quelques décent C# < -> VB.NET convertit en ligne. J'utilise http://www.developerfusion.com/tools/convert/csharp-to-vb/ pour obtenir:

Ensuite, la construction de chaque liste (de chaîne) et ajouter à ValidHtmlTags séparément. par exemple.

Dim paramList As New List(Of String)() 
paramList.Add("name")    
paramList.Add("value")   
ValidHtmlTags.Add("param", paramList)    

Je ne suis pas sûr que vous pouvez passer dans une liste de valeurs dans la liste (de chaîne) constructeur dans VB.NET.

+0

Jason - Nouvelle liste (de String) {"name", "value"} ne fonctionne pas. J'ai essayé de changer les accolades à (mais ça ne marche toujours pas.) – vamsivanka

+3

Je ne pense pas que VB.Net supporte les initialiseurs de collection jusqu'à v4.0 –

+0

@vamsivanka - Désolé, sautant entre C# et VB beaucoup en ce moment donc momentané J'ai mis à jour ma réponse pour montrer une meilleure solution –

10

Je crois que la réponse est que VB.NET 3.5 ne supporte pas la syntaxe d'initialisation de collection.

VB.NET in .NET 4 does support collection initializers comme suit:

Dim days = New Dictionary(Of Integer, String) From 
    {{0, "Sunday"}, {1, "Monday"}} 

Le précédent exemple de code est équivalent au code suivant.

Dim days = New Dictionary(Of Integer, String) 
days.Add(0, "Sunday") 
days.Add(1, "Monday") 
+0

Eilon - Sa similitude mais peu de différence becz, J'utilise ce dictionnaire pour vérifier la syntaxe html. param "est le nom du tag et le second {" name ", la valeur"} sont les attributs de ce tag – vamsivanka

+1

Mon point est seulement que VB.NET dans .NET 3.5 ne supporte pas cette syntaxe simple, donc il ne le fait pas ne supporte pas une syntaxe encore plus complexe des initialiseurs d'objets imbriqués Dans .NET 4, ils ont ajouté un support pour cela dans VB.NET comme vous pouvez le voir dans l'article auquel je suis lié. Le contient plusieurs exemples de scénarios avancés, y compris des scénarios similaires aux vôtres. – Eilon

6

Vous voulez quelque chose comme ça (pour .NET 3.5):

Shared Sub New() 
    Dim dict As New Dictionary(Of String, List(Of String)) 
    Dim l1 As New List(Of String) 
    l1.Add("name") 
    l1.Add("value") 
    dict.Add("param", l1) 
    Dim l2 As New List(Of String) 
    l2.Add("id") 
    l2.Add("type") 
    dict.Add("object", l2) 
    Dim l3 As New List(Of String) 
    l3.Add("src") 
    l3.Add("type") 
    l3.Add("wmode") 
    dict.Add("embed", l3) 
    MyClass.ValidHtmlTags = dict 
End Sub 

Private Shared ReadOnly ValidHtmlTags As Dictionary(Of String, List(Of String)) 
Questions connexes