PropertyInfo.GetValue () & # 8220; L'objet ne correspond pas au type de cible. & # 8221;
-
10-07-2019 - |
Question
Je me lance dans Reflection pour la première fois et je suis vraiment coincé. J'ai googlé tout ce que je peux penser. Je suis 90% où je veux être maintenant.
J'essaie de renvoyer la valeur d'une propriété dans une classe personnalisée via Reflection.
Voici ma déclaration de classe:
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 classe que j'ai écrite pour regarder la classe par réflexion ressemble à ceci:
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
J'ai placé un point d'arrêt sur la ligne property_value = propInfo.GetValue (Me, Nothing) pour voir le résultat.
Voici comment j'appelle mon 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()
Grâce à la réflexion, je peux voir le PropertyName et le type, tout ce dont j'ai besoin est la valeur de la propriété! Désormais, lorsque j'arrive au point d'arrêt, une exception TargetException s'affiche et le message d'erreur indique "L'objet ne correspond pas au type de cible". Il est maintenant 1h du matin et je suis en ruine, toute aide immédiate serait la bienvenue. J'ai fouillé MSDN et Google à mort, puis la dernière fois pour m'amuser;)
La solution
Me
fait référence à l'objet ObjectCompare
, qui est différent de la classe à partir de laquelle les objets PropertyInfo
ont été dérivés ( Class2
). Vous devez également transmettre un objet du type à partir duquel vous avez récupéré les objets 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)
Autres conseils
Je ne suis pas vraiment sûr de savoir ce que vous essayez de faire ici, mais je vais tenter le coup.
Voici le code que j'ai rencontré:
Appel :
Dim test As New Class2
test.NewProperty2 = "2"
Dim go As New ObjectCompare
go.CompareObjects(test)
Classe :
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
Comparer :
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