You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法像Dictionary那样嵌套初始化自定义集合类?

解决方案

要让IDOPropertyList支持像Dictionary(Of String, String)那样的双参数集合初始化,你需要在IDOPropertyList类中添加一个接收两个字符串参数的Add方法重载。

核心原因

VB.NET的集合初始化器语法规则是:当使用From { {参数1, 参数2} }格式时,编译器会自动查找集合类中匹配参数数量、类型的Add方法,自动调用该方法完成元素添加。Dictionary能直接用键值对初始化,正是因为它提供了Add(key As String, value As String)的重载方法。

修改后的代码

更新IDOPropertyList类,新增对应Add重载:

Public Class IDOPropertyList
    Private ReadOnly Property _IDOProperties As New List(Of IDOProperty)

    Public Function GetEnumerator() As IEnumerator(Of IDOProperty)
        Return _IDOProperties.GetEnumerator
    End Function

    ' 原有添加IDOProperty实例的方法
    Public Sub Add(IDOProperty As IDOProperty)
        _IDOProperties.Add(IDOProperty)
    End Sub

    ' 新增双参数Add方法,适配集合初始化语法
    Public Sub Add(name As String, value As String)
        Dim prop As New IDOProperty()
        prop.Add(name)
        prop.Add(value)
        _IDOProperties.Add(prop)
    End Sub

End Class

验证目标初始化语法

现在你可以直接使用预期的代码初始化IDOPropertyList:

Dim Test3 = New IDOPropertyList From {
    {"MyKey1", "MyValue1"},
    {"MyKey2", "MyValue2"}
}

可选优化

为了简化IDOProperty的创建逻辑,你可以给它添加带参数的构造函数:

Public Class IDOProperty
    Private ReadOnly Property _parts As New List(Of String)
    Public ReadOnly Property Name As String
        Get
            Return _parts(0)
        End Get
    End Property
    Public ReadOnly Property Value As String
        Get
            Return _parts(1)
        End Get
    End Property
    Public Function GetEnumerator() As IEnumerator(Of String)
        Return _parts.GetEnumerator
    End Function

    Public Sub Add(part As String)
        _parts.Add(part)
    End Sub

    ' 新增构造函数,直接初始化Name和Value
    Public Sub New(name As String, value As String)
        _parts.Add(name)
        _parts.Add(value)
    End Sub
End Class

此时IDOPropertyList的Add方法可以简化为:

Public Sub Add(name As String, value As String)
    _IDOProperties.Add(New IDOProperty(name, value))
End Sub

内容的提问来源于stack exchange,提问作者Kelderic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:35:29