C#のstaticラムダ式

 


C#のラムダ式にstaticを付けると、外側のローカル変数やメソッド引数、thisなどを参照できなくなります。これらをキャプチャしようとすると、コンパイルエラーが発生します。一方で、staticフィールドや定数は問題なく参照できます。

int outside = 10;
const int constValue = 10;

Func<int, int> normalLambda = x => x + outside;            // OK
Func<int, int> staticLambda = static x => x + constValue;  // OK
Func<int, int> staticLambda2 = static x => x + outside;    // コンパイルエラー

キャプチャを禁止することで、そのラムダ式が外部の状態に依存しないことを明示できます。また、後から修正した際に、意図しない変数のキャプチャを防ぐこともできます。

キャプチャを伴うラムダ式では、外部変数を保持するためのオブジェクトが生成される場合があります。staticラムダ式を使えば不要なメモリ割り当てを避けられる可能性があります。

外部状態を参照しないラムダ式では、積極的にstaticを付けていきたいところです。


HM

インプラス株式会社

このブログの人気の投稿

googleドライブの同期は、フォルダ選択ができました。

技術メモ「503 Service Unavailable」

なかなか消えない亀アイコン