2009-07-04 46 views
-1

根據this,你會如何忽略參數更多succint?如果你是一位語言設計師,你會如何忽略lambda的參數?

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

我沿着線想:

變種米= menuStrip.Items.Add( 「你好」,NULL,==> MessageBox.Show( 「科莫埃斯塔世界報」));

var m = menuStrip.Items.Add(「Hello」,null,?=> MessageBox.Show(「Como Esta Mundo」));

或也許此:

變種米= menuStrip.Items.Add(? 「你好」,NULL,=> MessageBox.Show( 「科莫埃斯塔世界報」));

你會採取什麼?

<語言進化觀察> 他們甚至添加??運營商的語言,這確實是美麗的。現在我覺得,如果他們想利用它(即NULLIF運營商)一個相反的,如果你想要把東西一樣「」或零,這是非常有用的等於零< /語言進化的觀察>

回答

2

那麼,就像匿名方法一樣,你必須知道你試圖將lambda表達式轉換爲的編譯時類型(除非C#開始支持免費函數,這是一個更大的變化)。 ?

我很喜歡=>雖然:

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

現在,作爲ToolStripCollection.Add特別聲明EventHandler爲代表,你的例子會好起來的。這不,雖然:

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

這裏編譯器會不知道要嘗試將lambda表達式轉換到的類型,所以它需要一個投 - 就像匿名方法今天所做的。