2009-07-04 4 views
-1

thisに基づいて、パラメータを無視した場合のサスペンドの仕組みを教えてください。言語デザイナーの方は、ラムダのパラメータを無視した方がいいでしょうか?

var m = menuStrip.Items.Add( "Hello"、null、delegate {MessageBox.Show( "Como Esta Mundo");});

私はの線に沿って考えています:

するvarメートル= menuStrip.Items.Add( "こんにちは"、ヌル、==> MessageBox.Show( "コモエスタムンド"));

var m = menuStrip.Items.Add( "Hello"、null、?=> MessageBox.Show( "Como Esta Mundo"));

またはおそらくこれ:

VAR M = menuStrip.Items.Add(? "こんにちは"、NULL、=> MessageBox.Show( "コモエスタムンド"))。

あなたのテイクは何ですか?

<言語進化観察> 彼らはさらに??実際に美しい言語へのオペレータ。今、もし彼らがそれを逆にしたいと思うなら(NullIf演算子)、これは同じものを何か同じものとして扱うか、ゼロがヌルと等しいと非常に役に立ちます。< /言語進化観察>

答えて

2

まあ、匿名のメソッドと同じように、ラムダ式を変換しようとしていたコンパイル時の型を知っていなければなりません(C#がフリー関数のサポートを開始しない限り、これはもっと大きな変更です)。私はかなり好き

=>しかし:?

Action<int> foo = ?=> Console.WriteLine("Okay"); 
EventHandler handler = ?=> Console.WriteLine("Okay too"); 

は今ToolStripCollection.Addとして、具体的デリゲートとしてEventHandlerを宣言し、あなたの例は大丈夫だろう。しかしこれはないだろう: - 匿名メソッドは、今日やるだけのよう

control.Invoke(?=> Console.WriteLine("No no no")); 

ここでコンパイラは、キャストを必要とするようにラムダ式を変換しようとするためにどのタイプか分からないでしょう。

関連する問題