次の方法を使用して、リフレクションを使用してプロパティをループし、実行時に 2 つのオブジェクトを比較しようとしています。
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 から Parameter Count Mismatch 例外が発生します。
これは、obj1 と obj2 のタイプや prop のタイプに関係なく発生します (私のテスト ケースでは、最初のプロパティはブール値です)。
2 つのオブジェクトの値を比較できるようにするには、どうすれば修正できますか?
解決
for each ループのすぐ内側に次の行を追加しました。
Dim paramInfo = prop.GetIndexParameters
If paramInfo.Count > 0 Then Continue For
最初のプロパティがパラメーターを取得していたため、問題が発生していました。ここでは、パラメーターを必要とするプロパティはスキップします。