1

好的,这个问题听起来可能有点令人困惑,所以我将尝试用一个例子来解释它。

假设你有这样的对象:

Class Something
    Private varX As New Integer
    Private varY As New String

'[..with the associated property definitions..]

    Public Sub New()
    End Sub

End Class

还有一个:

Class JsonObject
    Inherits Dictionary(Of String, String)

    Public Function MakeObject() As Object 'or maybe even somethingObject 
        Dim somethingObject As New Something()

        For Each kvp As KeyValuePair(Of String, String) In Me
            'Here should happen something to use the Key as varX or varY and the Value as value for the varX or varY
            somethingObject.CallByName(Me, kvp.Key, vbGet) = kpv.Value

        Next

        return somethingObject
    End Function

End Class

我从我自己的上一个问题中获得了“CallByMe()”函数

4

1 回答 1

0

CallByName工作方式与您尝试使用它的方式不同。查看文档,它会告诉您在这种特殊情况下正确的用法是

CallByName(Me, kvp.Key, vbSet, kpv.Value)

但是,该函数CallByName是 VB 库的一部分,并非所有设备都支持(特别是它不包含在 .NET Mobile 框架中),因此最好不要使用它。

使用适当的反射稍微复杂一些,但保证可以在所有平台上工作。

Dim t = GetType(Something)
Dim field = t.GetField(kvp.Key, BindingFlags.NonPublic Or BindingFlags.Instance)
field.SetValue(Me, kvp.Value)
于 2012-06-13T12:05:29.987 回答