.NET 関数の変換 to a .NET Expression>
ラムダ式を Expression に変換しようとする場合、プロセスは、expression.Body.Member.Name プロパティを使用することで簡単になります。ただし、Func を変換する逆変換は、
不可能な変換
Func を明示的にキャストしようとすると、課題が生じます。 Expression> への変換コンパイル時エラーが発生します。問題は、Funcが次のとおりであるという事実にあります。汎用デリゲートを表し、Expression に必要な式ツリー データが欠落しています。
舞台裏の複雑さ
ラムダ式を Expressionはコンパイラ駆動の魔法です。コンパイラーは、式ツリーを IL にコンパイルするのではなく、コード内に式ツリーを構築します。式を推論するためにその場で IL を分解することは、コンパイラの最適化とデータの破棄のため、複雑で潜在的に不可能なタスクです。
インタープリタ接続
ラムダが遍在する Lisp のような言語では、実装ではインタプリタが有利になることがよくあります。これらの言語では、コードとデータは実行時に基本的に交換可能です。プロセッサーはそのようなコードをネイティブに実行できないため、必要な仮想マシンをエミュレートするためにインタープリターが使用されます。
対照的に、C# はラムダをデータ (Expression>) として解釈できるようにすることでバランスをとります。コンパイル時にコード (Func) を作成し、コードをデータとして扱うかのような錯覚を与えます。
以上が.NET 関数を式に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。