PropertyInfo.GetValue() «Объект не соответствует целевому типу».

StackOverflow https://stackoverflow.com/questions/310518

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

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, все, что мне нужно, это значение свойства!Теперь, когда я добираюсь до точки останова, я получаю TargetException, и в сообщении об ошибке говорится: «Объект не соответствует целевому типу». Сейчас 1 часа ночи утра, и я разрушен, любая помощь прямо сейчас будет оценена.Я искал в MSDN и Google до смерти, а в последний раз ради развлечения;)

Это было полезно?

Решение

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)

Другие советы

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

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

Вызов:

        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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top