【问题标题】:Convert this C# dictionary to VB.NET将此 C# 字典转换为 VB.NET
【发布时间】:2009-12-30 22:07:55
【问题描述】:

如何将以下 C# 代码转换为 VB.NET?

转换工具做得不好。

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

【问题讨论】:

    标签: c# vb.net code-conversion


    【解决方案1】:

    我相信答案是 VB.NET 3.5 不支持集合初始化语法。

    VB.NET in .NET 4 does support collection initializers如下:

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

    前面的代码示例等价于下面的代码。

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

    【讨论】:

    • Eilon - 它相似但略有不同,因为我正在使用这本字典进行 html 语法检查。第一个值 "param" 是标签名称,第二个值 {"name,"value"} 是该标签的属性。
    • 我的意思是 .NET 3.5 中的 VB.NET 甚至不支持这种简单的语法,因此它绝对不支持更复杂的嵌套对象初始化器语法。在 .NET 4 中,他们在 VB.NET 中添加了对此的支持,您可以在我链接到的文章中看到。本文包含几个高级场景示例,包括与您的场景类似的场景。
    【解决方案2】:

    你想要这样的东西(对于 .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))
    

    【讨论】:

      【解决方案3】:
      Private Shared ReadOnly ValidHtmlTags As Dictionary(Of String, List(Of String)) = New Dictionary(Of String, List(Of String))
      

      然后在 Sub 或 Function 中的某处:

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

      【讨论】:

        【解决方案4】:

        还有一些不错的 C# VB.NET 也可以在线转换。我使用http://www.developerfusion.com/tools/convert/csharp-to-vb/ 获取:

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

        然后构建每个 List(Of String) 并分别添加到 ValidHtmlTags。例如。

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

        我不确定您是否可以将值列表传递到 VB.NET 中的 List(Of String) 构造函数中。

        【讨论】:

        • Jason - New List(Of String) {"name", "value"} 不起作用。我试图将花括号更改为 ( ,但仍然无法正常工作。
        • 我认为 VB.Net 直到 v4.0 才支持集合初始化器
        • @vamsivanka - 抱歉,目前经常在 C# 和 VB 之间跳来跳去,所以一时混乱。已更新我的答案以显示更好的解决方案。
        猜你喜欢
        • 2015-07-28
        • 1970-01-01
        • 2014-04-09
        • 2015-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多