変換関数 to Expression
C# では、ラムダ式を Expression> に変換します。メソッド呼び出しを通じて簡単に実行できます。ただし、逆のプロセスで、Func を返します。 Expression> に代入しようとすると、課題が生じます。
Func を代入しようとすると、問題が発生します。 Expression> に直接接続すると、互換性のないデータ構造のため、コンパイラによってエラーが発生します。このエラーは、Func が無効であることが原因で発生します。は、式ではなく汎用デリゲートを表します。
直接変換が失敗する理由
コンパイラはラムダ式をデータとして受け入れますが、この変換は実行中に実行されることに注意することが重要です。編集。ラムダ式は IL コードに逆アセンブルされ、式ツリーが構築されます。このプロセスは元に戻すことができず、コンパイル後に元のラムダ式を復元することはできません。
コード解釈への影響
Func を変換できないことExpression>へインタープリタ言語とコンパイル言語の基本的な違いを強調しています。 Lisp のようなインタープリタ型言語では、コードとデータは実行時に交換可能です。ただし、C# などのコンパイル言語では、コンパイラーは効率性を高めるためにコードをデータとして扱う機能を犠牲にします。
C# では、Expression> を通じてラムダをデータとして扱うかのような錯覚が生じます。構築しますが、この操作はコンパイル時にのみ可能です。 Func からの直接変換Expression>へ実行時には依然として複雑で未解決の問題が残ります。
以上がC# で Func を式に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。