PropertyInfo.GetValue () & # 8220; El objeto no coincide con el tipo de destino. & # 8221;

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

  •  10-07-2019
  •  | 
  •  

Pregunta

Estoy cavando en Reflection por primera vez y estoy realmente atrapado. He buscado en Google todo lo que se me ocurre. Estoy 90% donde quiero estar ahora.

Estoy tratando de devolver el valor de una Propiedad en una clase personalizada a través de Reflection.

Aquí está mi declaración de clase:

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

La clase que he escrito para mirar la clase a través de la reflexión se ve así:

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

Puse un punto de interrupción en la línea property_value = propInfo.GetValue (Me, Nothing) para ver cuál es el resultado.

Así es como llamo a mi código:

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()

A través de la reflexión puedo ver el PropertyName y el Tipo, ¡todo lo que necesito es el valor de la Propiedad! Ahora, cuando llego al punto de interrupción, obtengo una TargetException y el mensaje de error dice "El objeto no coincide con el tipo de destino". Ahora es la 1 de la mañana y estoy destrozado, cualquier ayuda en este momento sería apreciada. He buscado MSDN y Google hasta la muerte y luego la última vez por diversión;)

¿Fue útil?

Solución

Me se refiere al objeto ObjectCompare , que es diferente de la clase de la que se derivaron los objetos PropertyInfo ( Class2 ). También debe pasar un objeto del tipo del que recuperó los objetos 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)

Otros consejos

No estoy realmente seguro de saber lo que está tratando de hacer aquí, pero lo intentaré.

Aquí está el código que he creado:

Llamadas :

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


        Dim go As New ObjectCompare
        go.CompareObjects(test)

Clase :

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

Comparar :

 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top