0

「BindSetMember」メソッドに次の戻り行があります。

return new DynamicMetaObject(Expression.TypeAs(methodCall, binder.ReturnType), restrictions)

「methodCall」式から返された「bool」値をボックス化しません(型変換エラーが発生します)。式メソッド 'methodCall' の戻り値 (bool) がオブジェクト型にボックス化されることを期待していました (メソッドは 'bool' を返しますが、DLR 呼び出しサイトは 'object' を想定しているため; 仕様では、'TypeAs ' 使用されている)。「Expression.Convert」も試しましたが、型変換エラーが発生し続けます。なぜこれが機能しないのですか?呼び出しを転送するためにラムダ式を作成する必要があります!? :(

ありがとう。

(参考: この質問は既存のものと似ていますが、別の解決策としてここで特定の質問をしています)

4

1 に答える 1

1

問題が見つかりました。変換の問題はメソッド式の戻り値の型が原因だと思っていましたが、メソッド パラメーターの 1 つにも変換式があることを忘れていました。エラーが発生したのはその変換でした。特定のオブジェクトから値型への明示的な変換がありますが、さらに調査すると、暗黙的な変換が機能する前に、「オブジェクト」を実際の型に変換する必要があることがわかりました。;)

したがって、要約すると、「オブジェクト」以外のものを返すメソッドがある場合は、単に「Expression.Convert」または「Expression.TypeAs」を使用して、戻り値の型をオブジェクト型に変換/ボックス化します。;)

于 2013-08-14T19:52:54.190 に答える