16

2つの違いは何ですか?

Invoke((MethodInvoker) delegate {
        checkedListBox1.Items.RemoveAt(i);
        checkedListBox1.Items.Insert(i, temp + validity);
        checkedListBox1.Update();
    }
);

Invoke((MethodInvoker)
    (
        () => 
        {
            checkedListBox1.Items.RemoveAt(i);
            checkedListBox1.Items.Insert(i, temp + validity);
            checkedListBox1.Update();
        }
    )
);

ラムダ式を使用する理由はありますか? また、(MethodInvoker)デリゲートとラムダを MethodInvoker 型にキャストしていますか? (MethodInvoker)キャストを必要としないのはどのような表現ですか?

4

3 に答える 3

26

1) ラムダ式はやや短く、簡潔です

2) はい

3) 次のように Action タイプを使用できます。

Invoke(new Action(
    () => 
    {
        checkedListBox1.Items.RemoveAt(i);
        checkedListBox1.Items.Insert(i, temp + validity);
        checkedListBox1.Update();
    }
)
);
于 2011-10-13T07:07:18.703 に答える
3

2 つのアプローチは同等です。1 つ目は匿名メソッドと呼ばれ、以前の .net 2.0 機能です。ラムダはキャストを必要としません。

現代の C#/.net 開発ではラムダの方が広く使用されているため、私はラムダを好みます。匿名デリゲートは、ラムダ以上のものを提供しません。ラムダは、場合によっては便利なものから必要なものまでの範囲の型推論を可能にします。

于 2011-10-13T07:05:05.010 に答える
2

MethodInvoker は、void パラメーター リストを使用してメソッドを呼び出すために使用される単純なデリゲートを提供します。このデリゲートは、コントロールの Invoke メソッドを呼び出す場合、または単純なデリゲートが必要だが自分で定義したくない場合に使用できます。

一方、アクションは最大 4 つのパラメータを取ることができます。

于 2012-04-14T08:47:47.047 に答える