PropertyInfo.GetValue () "Объект не соответствует типу цели." - PullRequest
7 голосов
/ 22 ноября 2008

Я в первый раз копаюсь в Reflection и действительно застрял. Я погуглил все, что могу придумать. Я на 90%, где я хочу быть сейчас.

Я пытаюсь вернуть значение свойства в пользовательском классе с помощью Reflection.

Вот мое объявление класса:

Public Class Class2
    Private newPropertyValue2 As String

    Public Property NewProperty2() As String
        Get
            Return newPropertyValue2
        End Get
        Set(ByVal value As String)
            newPropertyValue2 = value
        End Set
    End Property   
End Class

Класс, который я написал, чтобы посмотреть на класс через отражение, выглядит так:

Public Class ObjectCompare
    Private _OriginalObject As PropertyInfo()

    Public Property OriginalObject() As PropertyInfo()
        Get
            Return _OriginalObject
        End Get
        Set(ByVal value As PropertyInfo())
            _OriginalObject = value
        End Set
    End Property

    Public Sub CompareObjects()
        Dim property_value As Object

        For i As Integer = 0 To OriginalObject.Length - 1
            If OriginalObject(i).GetIndexParameters().Length = 0 Then
                Dim propInfo As PropertyInfo = OriginalObject(i)

                Try
                    property_value = propInfo.GetValue(Me, Nothing)
                Catch ex As TargetException
                End Try   
            End If
        Next
    End Sub
End Class

Я установил точку останова в строке property_value = propInfo.GetValue (Me, Nothing), чтобы увидеть результат.

Вот как я называю свой код:

Dim test As New Class2
test.NewProperty2 = "2"

Dim go As New ObjectCompare
Dim propInf As PropertyInfo()
propInf = test.GetType.GetProperties()

go.OriginalObject = propInf

go.CompareObjects()

Посредством отражения я вижу PropertyName и Type, все, что мне нужно, это значение Property! Теперь, когда я добираюсь до точки останова, я получаю TargetException и сообщение об ошибке говорит: «Объект не соответствует типу цели». Сейчас 1:00 утра, и я потерпел крушение, любая помощь прямо сейчас будет признательна. Я искал MSDN и Google до смерти, а затем в прошлый раз для развлечения;)

Ответы [ 2 ]

20 голосов
/ 22 ноября 2008

Me относится к объекту ObjectCompare, который отличается от класса, из которого были получены объекты PropertyInfo (Class2). Вам также необходимо передать объект того типа, из которого вы извлекли PropertyInfo объекты.

Public Sub CompareObjects(ByVal It as Object)
    Dim property_value As Object

    For i As Integer = 0 To OriginalObject.Length - 1
        If OriginalObject(i).GetIndexParameters().Length = 0 Then
            Dim propInfo As PropertyInfo = OriginalObject(i)

            Try
                property_value = propInfo.GetValue(It, Nothing)
            Catch ex As TargetException
            End Try   
        End If
    Next
End Sub

go.CompareObjects(test)
1 голос
/ 22 ноября 2008

Я не совсем уверен, что знаю, что вы пытаетесь сделать здесь, но я попробую.

Вот код, который я придумал:

Вызов

        Dim test As New Class2
        test.NewProperty2 = "2"


        Dim go As New ObjectCompare
        go.CompareObjects(test)

Класс :

Public Class Class2
    Private newPropertyValue2 As String

    Public Property NewProperty2() As String
        Get
            Return newPropertyValue2
        End Get
        Set(ByVal value As String)
            newPropertyValue2 = value
        End Set
    End Property
End Class

Сравните

 Public Class ObjectCompare

    Public Sub CompareObjects(ByVal MyType As Object)

        For Each Prop In MyType.GetType().GetProperties()
            Dim value = Prop.GetValue(MyType, Nothing)
            Console.WriteLine(value)
        Next
        Console.ReadLine()
    End Sub
End Class
...