2009-07-04 47 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表达式转换到的类型,所以它需要一个投 - 就像匿名方法今天所做的。