Wyjątek niezgodności licznika parametrów podczas wywoływania właściwości PropertyInfo.GetValue
Próbuję porównać dwa obiekty w środowisku wykonawczym za pomocą odbicia, aby zapętlić ich właściwości za pomocą następującej metody:
Private Sub CompareObjects(obj1 As Object, obj2 As Object)
Dim objType1 As Type = obj1.GetType()
Dim propertyInfo = objType1.GetProperties
For Each prop As PropertyInfo In propertyInfo
If prop.GetValue(obj1).Equals(prop.GetValue(obj2)) Then
'Log difference here
End If
Next
End Sub
Ilekroć testuję tę metodę, otrzymuję wyjątek Niezgodność licznika parametrów od System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck, gdy wywołuje prop.GetValue (obj1).
Dzieje się tak bez względu na typ obj1 i obj2, ani typ w rekwizycie (w moim przypadku testowym, pierwsza właściwość jest logiczna).
Co robię źle i jak mogę to naprawić, aby móc porównać wartości z dwóch obiektów?
Rozwiązanie
Dodałem następujące wiersze w środku każdej pętli:
Dim paramInfo = prop.GetIndexParameters
If paramInfo.Count > 0 Then Continue For
Pierwszą właściwością było pobranie parametru powodującego problem. Na razie pominę każdą właściwość, która wymaga parametru.