Estoy cavando en Reflection por primera vez y estoy realmente atrapado. He buscado en Google todo lo que puedo pensar. Estoy 90% donde quiero estar ahora.PropertyInfo.GetValue() "El objeto no coincide con el tipo de destino".
Estoy tratando de devolver el valor de una propiedad en una clase personalizada a través de Reflection.
aquí está mi declaración de la 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
pongo un punto de interrupción en el valor_propiedad = propInfo. Línea 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()
través de la reflexión que puedo ver el PropertyName y 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 objetivo". Ahora es la 1 AM de la mañana y estoy destrozado, cualquier ayuda en este momento sería apreciada. He buscado en Google y MSDN a muerte y luego en el último tiempo para la diversión;)
¡Acabo de despertar y le he dado una oportunidad y funciona como un encanto! Pensé que el primer parámetro del método GetValue hacía referencia al objeto PropertyInfo del que deseaba recuperar un valor. ¡Gracias de nuevo! – StevenMcD
+1 esto funcionó para mí también. Mi caso fue diferente; Estaba usando propInfo.GetValue (It), pero las informaciones de la propiedad fueron tomadas de la clase incorrecta. Salud, amigo. – ashes999
+1 Estaba teniendo problemas con el uso del método GetValue. Su explicación de asegurarse de que se llamara a GetValue con el objeto desde el que se creó PropertyInfo fue inmediata. –