Я пытаюсь сравнить два объекта во время выполнения, используя отражение, чтобы перебрать их свойства, используя следующий метод:
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
Всякий раз, когда я тестирую этот метод, я получаю исключение несоответствия счетчика параметров из System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck, когда он вызывает prop.GetValue(obj1).
Это происходит независимо от типа obj1 и obj2, а также типа в prop (в моем тестовом случае первое свойство является булевым).
Что я делаю неправильно и как его исправить, чтобы я мог сравнивать значения с двумя объектами?
Решение
Я добавил следующие строки внутри каждого цикла:
Dim paramInfo = prop.GetIndexParameters
If paramInfo.Count > 0 Then Continue For
Первое свойство принимало параметр, который вызывал проблему. На данный момент я просто пропущу любое свойство, требующее параметр.