2012-05-04 14 views
5

私は読んでいたスイッチhereを引っ張ってこのコードに出くわした。()=> {}はどういう意味ですか?

() => {}とは何か説明できますが、そのコード行を理解するにはどうすればよいですか?

var moveMap = new Dictionary<string, Action>() 
{ 
    {"Up", MoveUp}, 
    {"Down", MoveDown}, 
    {"Left", MoveLeft}, 
    {"Right", MoveRight}, 
    {"Combo",() => { MoveUp(); MoveUp(); MoveDown(); MoveDown(); }} 
}; 

moveMap[move](); 
+0

これはラムダ式です。詳細については、[MSDN](http://msdn.microsoft.com/en-us/library/bb397687.aspx)を参照してください。 – MatthiasG

答えて

9

それはlambda expressionです:

すべてのラムダ式は「に行く」と読まれるラムダオペレーター=>を、使用しています。ラムダ演算子の左側が入力パラメータを指定します(もしあれば)、右側がただの二つの組み合わせを呼び出し、あなたはここに新しい、一時的な機能を構築している。基本的

式またはステートメントのブロックを保持しています他の機能。

上記のように、左側の()は、空のパラメータリスト(他の機能と同様)があることを意味します。右側の{}は、ブロック内のいくつかのステートメントを実行することを意味します。これは、値を計算する「式ラムダ」とは異なり、副作用のために呼び出される「ステートメントラムダ」になります。

+3

匿名でない場合は、ラムダではありません。言ってるだけ'。 – tdammers

+0

@tdammers:Hehe、そこにポイントがある。 –

+0

編集 - それは実際には他の4つの関数を呼び出すのではなく、2つの関数をそれぞれ2回呼び出します。 –

4

これはlambda expressionです。 MSDNは、「文ラムダ」としてそれを指す:

ステートメントラムダは ステートメント(単数または複数)は中括弧で囲まれていることを除いて、発現ラムダに似ています。

辞書にはActions(代理人)のセットが含まれています。 4は明示的に定義され、5番目は無名関数であり、他の2つを呼び出す。コードの最後の行はActionを呼び出します(キーで辞書からデリゲートを取り出して呼び出します)。

4

() => {/*code*/}は、ゼロパラメータを取る匿名デリゲートを作成する便利な方法です。ラムダ式です。本質的には、あなたのケースでは2回上に移動してから2回下に移動するコール可能なコードを作成します。

あなたは、パラメータなしのラムダに限定されるものではない - あなたは引数を持つものを作成することができます。これは、匿名関数はパラメータなしである

Action<string> callable = (name) => {Console.WriteLine("Hello, {0}!", s);}; 
callable("world"); 
callable("quick brown fox"); 
3

()

=>はラムダオペレータが(に行くと発音)

です

辞書はKeyValuePairで初期化されています。最後のオプションはパラメータを取らずに他の関数を呼び出す無名関数です

関連する問題