La excepción de error de recuento de parámetros al llamar a PropertyInfo.GetValue
Estoy tratando de comparar dos objetos en tiempo de ejecución usando la reflexión para recorrer sus propiedades usando el siguiente método:
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
Cada vez que pruebo este método, obtengo una excepción de Desajuste de recuento de parámetros de System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck cuando llama prop.GetValue (obj1).
Esto sucede sin importar el tipo de obj1 y obj2, ni el tipo en prop (en mi caso de prueba, la primera propiedad es un booleano).
¿Qué estoy haciendo mal y cómo puedo solucionarlo para poder comparar los valores de los dos objetos?
Solución
Agregué las siguientes líneas justo dentro de cada bucle:
Dim paramInfo = prop.GetIndexParameters
If paramInfo.Count > 0 Then Continue For
La primera propiedad fue tomar un parámetro, que estaba causando el problema. Por ahora, solo saltearé cualquier propiedad que requiera un parámetro.