Tôi đang đào sâu vào Reflection lần đầu tiên và tôi thực sự bị mắc kẹt. Tôi đã googled tất cả mọi thứ tôi có thể nghĩ đến. Tôi là 90% nơi tôi muốn bây giờ.PropertyInfo.GetValue() "Đối tượng không khớp với loại mục tiêu."
Tôi đang cố trả về giá trị của Thuộc tính trong lớp tùy chỉnh thông qua Phản ánh.
Dưới đây là lời tuyên bố lớp học của tôi:
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
Lớp tôi đã viết để xem xét các lớp thông qua phản ánh trông như thế này:
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
tôi đặt một breakpoint trên property_value = propInfo. GetValue (Tôi, Không có gì) để xem kết quả là gì.
Đây là cách tôi gọi mã của tôi:
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()
Qua phản ánh tôi có thể thấy PropertyName và Type, tất cả tôi cần là giá trị của tài sản! Bây giờ khi tôi nhận được đến điểm ngắt, tôi nhận được một TargetException và thông báo lỗi nói "Đối tượng không phù hợp với loại mục tiêu." Bây giờ 1 giờ sáng của nó và tôi bị đắm, bất kỳ sự giúp đỡ nào ngay bây giờ sẽ được đánh giá cao. Tôi đã tìm kiếm MSDN và Google đến chết và sau đó đúng thời hạn cuối cùng cho vui;)
Tôi vừa mới thức dậy và cho này một đi và nó hoạt động như một say mê! Tôi nghĩ tham số đầu tiên của phương thức GetValue được gọi là đối tượng PropertyInfo mà bạn muốn lấy một giá trị từ đó. Cảm ơn một lần nữa! – StevenMcD
+1 điều này cũng làm việc cho tôi. Trường hợp của tôi khác; Tôi đã sử dụng propInfo.GetValue (It), nhưng infos thuộc tính được lấy từ lớp sai. Ăn mừng nào. – ashes999
+1 Tôi gặp khó khăn khi sử dụng phương thức GetValue. Lời giải thích của bạn về việc đảm bảo rằng GetValue được gọi với đối tượng mà PropertyInfo đã được tạo từ vị trí trên! –