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