我正在尝试使用反射在运行时比较两个对象,以使用以下方法循环它们的属性:
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
每当我测试此方法时,当它调用 prop.GetValue(obj1) 时,我都会从 System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck 中得到一个参数计数不匹配异常。
无论 obj1 和 obj2 的类型如何,prop 中的类型如何(在我的测试用例中,第一个属性是布尔值),都会发生这种情况。
我做错了什么,我该如何解决它,以便我可以比较两个对象的值?
解决方案
我在 for each 循环中添加了以下几行:
Dim paramInfo = prop.GetIndexParameters
If paramInfo.Count > 0 Then Continue For
第一个属性采用了导致问题的参数。现在,我将跳过任何需要参数的属性。