[解決済み】C#のラムダ式。なぜ私はそれらを使用する必要がありますか?
質問
をさっと読みました。 Microsoft Lambda Expression のドキュメントを参照してください。
このような例で理解が深まりましたけど。
delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
それにしても、なぜそんなに革新的なのか、理解できません。ただのメソッドで、メソッド変数が終了すると死んでしまうんでしょう?なぜ、本物のメソッドではなく、これを使わなければならないのでしょうか?
どのように解決するの?
ラムダ式 は匿名代議員のためのシンプルな構文で、匿名代議員が使用できる場所ならどこでも使用することができます。 しかし、その逆は真ではありません。ラムダ式は式木に変換することができ、LINQ to SQLのような多くのマジックを実現することができます。
以下は LINQ to Objects 匿名デリゲートとラムダ式を使って、より簡単に表現することができます。
// anonymous delegate
var evens = Enumerable
.Range(1, 100)
.Where(delegate(int x) { return (x % 2) == 0; })
.ToList();
// lambda expression
var evens = Enumerable
.Range(1, 100)
.Where(x => (x % 2) == 0)
.ToList();
ラムダ式と匿名デリゲートは、別の関数を書くよりも利点があります。 クロージャ を可能にすることができます。 パラメータを追加することなく、ローカルの状態を関数に渡します。 を関数に追加したり、一度だけ使用するオブジェクトを作成したりします。
表現ツリー
はC# 3.0の非常に強力な新機能で、実行可能なメソッドへの参照を取得するだけでなく、式の構造をAPIで確認することができます。 APIはただデリゲートパラメータを
Expression<T>
コンパイラは無名デリゲートの代わりにラムダから式木を生成します。
void Example(Predicate<int> aDelegate);
のように呼ばれる。
Example(x => x > 5);
になります。
void Example(Expression<Predicate<int>> expressionTree);
後者には
抽象構文木
を記述した式
x > 5
. LINQ to SQLは、C#の式をサーバー側でフィルタリングや順序付けなどに必要なSQL式に変換できるようにするために、この動作に依存しているのです。
関連
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] リスト内包とラムダ+フィルタの比較
-
[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
-
[解決済み] Distinct() with lambda?
-
[解決済み】C++11のラムダ式って何?
-
[解決済み】なぜFunc<T>ではなくExpression<Func<T>を使うのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] 関数を終了するには?
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する