[解決済み】なぜFunc<T>ではなくExpression<Func<T>を使うのですか?
2022-03-23 17:20:13
質問
私はラムダを理解し
Func
と
Action
のデリゲートです。しかし式は
を使うのは難しいです。
どのような状況で
Expression<Func<T>>
ではなく、古い
Func<T>
?
解決方法は?
ラムダ式を式木として扱い、実行するのではなく、その中を見たいとき。例えば、LINQ to SQLが式を取得し、同等のSQL文に変換してサーバーに送信する(ラムダを実行するのではない)。
概念的に
Expression<Func<T>>
は
全く異なる
から
Func<T>
.
Func<T>
を表します。
delegate
へのポインタのようなものです。
Expression<Func<T>>
を表します。
ツリーデータ構造
をラムダ式に置き換えたものです。この木構造
は、ラムダ式が何を行うかを記述しています。
を行うのではなく、実際に行うのです。基本的には、式、変数、メソッドコールなどの構成に関するデータを保持します(例えば、このラムダはある定数+あるパラメータであるというような情報を保持します)。この記述を使って、実際のメソッドに変換することができます (
Expression.Compile
あるいは、LINQ to SQLの例のように)他のことをすることもできます。ラムダを無名メソッドや式木として扱う行為は、純粋にコンパイル時のものです。
Func<int> myFunc = () => 10; // similar to: int myAnonMethod() { return 10; }
は事実上、何も得られず10を返すILメソッドにコンパイルされます。
Expression<Func<int>> myExpression = () => 10;
は、パラメータを取らずに値10を返す式を記述したデータ構造に変換されます。
コンパイル時にはどちらも同じに見えますが、コンパイラが生成するのは 全く異なる .
関連
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] \0-9]よりも効率が悪い
-
[解決済み] ラムダ式からプロパティ名を取得する
-
[解決済み】IEnumerable vs List - What to Use? どのように動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】Nullableオブジェクトは値を持たなければならない?