21

次の方法を使用して、リフレクションを使用してプロパティをループし、実行時に 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

最初のプロパティがパラメーターを取得していたため、問題が発生していました。ここでは、パラメーターを必要とするプロパティはスキップします。

4

3 に答える 3