Po raz pierwszy kopie w Reflection i naprawdę utknąłem. Przeszukałem wszystko, co tylko mogę wymyślić. Jestem 90% tam, gdzie chcę teraz być.PropertyInfo.GetValue() "Obiekt nie pasuje do typu celu."
Próbuję zwrócić wartość właściwości w niestandardowej klasie poprzez odbicie.
Oto moja deklaracja klasy:
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
Klasa Pisałem patrzeć na klasę poprzez odbicie wygląda następująco:
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
I umieścić punkt przerwania na property_value = propInfo. GetValue (Ja, Nic), aby zobaczyć, jaki jest wynik.
Oto jak ja nazywam mój kod:
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()
poprzez odbicie widzę propertyName i rodzaju, wszystko czego potrzebujesz to wartość majątku! Teraz, gdy dojdę do punktu przerwania, otrzymuję TargetException, a komunikat o błędzie mówi "Obiekt nie pasuje do typu celu". Jest teraz o 1 nad ranem i jestem rozbity, jakakolwiek pomoc w tej chwili byłaby doceniona. Rozglądałem MSDN i Google na śmierć, a następnie w ostatniej chwili do zabawy;)
Właśnie się obudziłem i dałem z siebie wszystko, a działa jak urok! Myślałem, że pierwszy parametr metody GetValue odwołuje się do tego obiektu PropertyInfo, z którego chcesz pobrać wartość. Dzięki jeszcze raz! – StevenMcD
+1 to działało również dla mnie. Mój przypadek był inny; Używałem propInfo.GetValue (It), ale informacje o właściwościach zostały pobrane z niewłaściwej klasy. Zdrówko. – ashes999
+1 Miałem problemy z używaniem metody GetValue. Twoje wyjaśnienie, że GetValue zostało wywołane z obiektem, z którego zbudowano PropertyInfo, było na miejscu! –