1

OK、その質問は少し紛らわしいように聞こえるので、例を挙げて説明しようと思います。

次のようなオブジェクトがあると仮定します。

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 に答える