用lambda和事件欺骗C#

时间:2015-03-01 23:10:52

标签: c# events lambda

我试图弄清楚是否有办法完成这样的事情:

Button button = new Button() { OnClick += (sender, e) => MessageBox.Show("hello") };

但它并不想工作:D我想创建一个控件并同时向其添加一个事件。有可能吗?

3 个答案:

答案 0 :(得分:8)

不,遗憾的是,对象初始值设定项不允许您附加事件处理程序。

C#团队意识到了这个限制 - 有人希望这会出现在C#6中,但该功能已被删除。我希望它由于缺乏时间而被丢弃而不是真正失去这个功能 - 也许我们会在C#7中看到它。

答案 1 :(得分:2)

您不能。您只能初始化对象初始值设定项中的属性和字段。您需要单独附加活动。

答案 2 :(得分:1)

虽然您无法使用对象初始化程序执行此操作,但您可以这样做:

Func<EventHandler, Button> newButtonWithClick = h =>
{
    Button b = new Button();
    b.Click += h;
    return b;
};

Button button = newButtonWithClick((sender, e) => MessageBox.Show("hello"));