5

Pulling the switch hereを読んでいて、このコードに出くわしました。

() => {}そのコード行を理解するために何を読む必要があるのか​​ 説明してもらえますか?

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

moveMap[move]();
4

4 に答える 4

9

これはラムダ式です:

すべてのラムダ式は、=>「goesto」として読み取られるラムダ演算子を使用します。ラムダ演算子の左側は入力パラメーター(存在する場合)を指定し、右側は式またはステートメントブロックを保持します

基本的に、ここでは、他の2つの関数の組み合わせを呼び出すだけの新しい一時関数を作成しています。

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

于 2012-05-04T10:25:31.493 に答える
4

ラムダ式です。MSDNは、これを「ステートメントラムダ」と呼んでいます。

ステートメントラムダは、ステートメントが中括弧で囲まれていることを除いて、式ラムダに似ています。

辞書にはActions(委任)のセットが含まれています。4は明示的に定義されており、5番目は他の2つを呼び出す無名関数です。コードの最後の行はアクションを呼び出します(キーによってディクショナリからデリゲートを取得して呼び出します)。

于 2012-05-04T10:25:12.310 に答える
4

() => {/*code*/}ラムダ式であり、パラメーターをまったくとらない匿名デリゲートを作成する便利な方法です。基本的に、あなたの場合は2回上に移動してから2回下に移動する呼び出し可能なコードを作成します。

パラメータのないラムダに限定されません - 引数を持つラムダを作成できます:

Action<string> callable = (name) => {Console.WriteLine("Hello, {0}!", s);};
callable("world");
callable("quick brown fox");
于 2012-05-04T10:25:52.290 に答える
3

()これはパラメータのない無名関数です

=>ラムダ演算子です (Goes to と発音します)

ディクショナリは KeyValuePair で初期化されています。最後のオプションは、パラメータをとらず、他の関数を呼び出す無名関数です

于 2012-05-04T10:26:55.657 に答える