PropertyInfo.GetValue () & # 8220; El objeto no coincide con el tipo de destino. & # 8221;
-
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;)
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