).Compile()を使用すると、結果は最初の引数がClosureであるデリゲートになります。Closureオブジェクトを渡す必要があるように見えます。);これは、それ自体が意味をなさない単純化された例です。Func<Action<SomeObject>>をFunc<Action<object>>とラップすることです。私はすでにネストされていない代理人のためにこれを行うことができます。リフレクション中に便利です。表示されるClosureタイプは実装の詳細です。Frameworkインフラストラクチャをサポートしており、コードから直接使用するためのものではありません。動的に生成されるメソッドの実行時の状態を表します。式ツリーは状態を持つことができます。Closureインスタンスには、ラムダ式がうまく閉じているすべての非リテラル定数が格納されます。式ツリーにネストされたラムダのデリゲートの連鎖を含めることもできます。これを実現するために、式ツリーコンパイラはかわいいトリックを使用します。これはDynamicMethodを使用してメモリコードを生成します。これは定義上は静的です。それでも、彼らは最初の議論を終えたデリゲートを作成しています。これは、CLRがデリゲートのターゲットフィールドを静的メソッドの最初の引数として渡すことを意味します。あなたからClosureの引数を効果的に隠しています。あなたの問題の解決法は簡単です。メソッドを呼び出そうではなく、リフレクションを使用している場合はDelegate.DynamicInvokeを使用するか、式ツリーのコンテキストでExpression.Invokeを使用してデリゲートを呼び出してください。