Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# Languageラムダ式


備考

閉鎖

ラムダ式は暗黙的に使用される変数を取り込み、クロージャを作成します 。クロージャは、いくつかの状態コンテキストと共に関数です。コンパイラは、ラムダ式がその周囲の文脈からの値を '囲む(enclose)'たびにクロージャを生成する。

例:以下の場合

Func<object, bool> safeApplyFiltererPredicate = o => (o != null) && filterer.Predicate(i);

safeApplyFilterPredicateは、 filtererの現在の値へのプライベート参照を持ち、 Invokeメソッドが次のように動作する、新しく作成されたオブジェクトを参照します

o => (o != null) && filterer.Predicate(i);

safeApplyFilterPredicateの値の参照が維持されているsafeApplyFilterPredicatesafeApplyFilterPredicateが現在参照しているオブジェクトへの参照が存在するため、これはfiltererです。これはガベージコレクションに影響し、現在filtererいるオブジェクトがfilterer場合に予期しない動作が発生する可能性があります。

一方、クロージャを使用して、他のオブジェクトへの参照を含むビヘイビアをカプセル化するエフェクトを考察することができます。

例えば

var logger = new Logger();
Func<int, int> Add1AndLog = i => {
    logger.Log("adding 1 to " + i);
    return (i + 1);
};

クローズを使用して状態マシンをモデル化することもできます。

Func<int, int> MyAddingMachine() {
    var i = 0;
    return x => i += x;
};

ラムダ式 関連する例