vb.net - get property value from object c#
PropertyInfo.GetValue() "El objeto no coincide con el tipo de destino". (2)
No estoy seguro de saber lo que intentas hacer aquí, pero lo intentaré.
Aquí está el código que he surgido:
Llamando :
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
Compare :
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
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.
Estoy intentando 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 escribí 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 PropertyName y Type, ¡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 a MSDN y Google hasta la muerte y luego en la última vez por diversión;)
Me
hace referencia 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)