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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top