PropertyInfo.GetValue () „Objekt nicht Zieltyp entsprechen.“
-
10-07-2019 - |
Frage
Ich bin Graben in Reflexion zum ersten Mal und ich bin wirklich stecken. Ich habe alles googeln ich mir vorstellen kann. Ich bin 90%, wo ich jetzt sein will.
Ich versuche, den Wert einer Immobilie in einer benutzerdefinierten Klasse durch Reflexion zurück.
Hier ist meine Klassendeklaration:
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
Die Klasse ich geschrieben habe in der Klasse durch Reflexion aussehen sieht wie folgt aus:
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
habe ich einen Haltepunkt auf der property_value = propInfo.GetValue (Me, Nothing) Linie zu sehen, was das Ergebnis ist.
Hier ist, wie nenne ich meinen Code:
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()
Durch Reflexion kann ich den Propertynamen und Typen sehen, alles was ich brauche ist der Wert der Immobilie! Nun, wenn ich an den Haltepunkt bekommen, erhalte ich eine TargetException und die Fehlermeldung „Objekt nicht Zieltyp übereinstimmt.“ Sein jetzt 01.00 am Morgen und ich bin ruiniert, Recht jede Hilfe jetzt würde geschätzt. Ich habe gesucht MSDN und Google zu Tode und dann auf der letzten Zeit für Spaß;)
Lösung
Me
bezieht sich auf die ObjectCompare
Objekt, das als die Klasse unterscheidet, aus dem die PropertyInfo
Objekte abgeleitet wurden (Class2
). Sie müssen auch in einem Objekt des Typs übergeben, von dem Sie die PropertyInfo
Objekte abgerufen werden.
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)
Andere Tipps
Ich bin nicht wirklich sicher, ob ich weiß, was Sie versuchen, hier zu tun, aber ich werde einen Stich an ihn hat.
Hier ist der Code, den ich gekommen bin, oben:
Aufruf :
Dim test As New Class2
test.NewProperty2 = "2"
Dim go As New ObjectCompare
go.CompareObjects(test)
Klasse :
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
Vergleichen :
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