2008-11-21 3 views
7

Я впервые врывался в Отражение, и я действительно застрял. Я искал все, что мог придумать. Я на 90%, где я хочу быть сейчас.PropertyInfo.GetValue() «Объект не соответствует типу цели».

Я пытаюсь вернуть значение свойства в пользовательский класс через Reflection.

Вот мой класс декларации:

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 

класс я написал, чтобы посмотреть на класс через отражение выглядит следующим образом:

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 

я поставил точку останова на property_value = propInfo. GetValue (Me, Nothing), чтобы увидеть результат.

Вот как я называю мой код:

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() 

Через размышлении я могу увидеть ИмениСвойства и типа, все, что мне нужно, это значение недвижимости! Теперь, когда я добираюсь до точки останова, я получаю TargetException и сообщение об ошибке говорит: «Объект не соответствует типу цели». Его сейчас 1 утра по утрам, и я потерпел крушение, теперь любая помощь будет оценена по достоинству. Я искал MSDN и Google до смерти, а затем в последний раз для удовольствия;)

ответ

20

Me относится к ObjectCompare объекту, который отличается от класса, от которого получены PropertyInfo объектов (Class2). Вам также нужно передать объект типа, из которого вы извлекли объекты 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) 
+0

Я только что проснулся и получил это, и он работает как шарм! Я думал, что первый параметр метода GetValue ссылается на тот объект PropertyInfo, из которого вы хотите получить значение. Еще раз спасибо! – StevenMcD 2008-11-22 07:49:17

1

Я не совсем уверен, что я знаю, что вы пытаетесь сделать здесь, но у меня будет удар на него.

Вот код, который я придумал:

Вызов:

 Dim test As New Class2 
     test.NewProperty2 = "2" 


     Dim go As New ObjectCompare 
     go.CompareObjects(test) 

Класс:

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 

Compare:

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 
Смежные вопросы