PropertyInfo.GetValue () & # 8220; L'objet ne correspond pas au type de cible. & # 8221;

StackOverflow https://stackoverflow.com/questions/310518

  •  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;)

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top