使用 lambda 和事件在 C# 中使用技巧

Trick in C# with lambda and event

我想知道是否有办法完成这样的事情:

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

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

您可以't.You只能在对象初始化程序中初始化属性和字段。您需要单独附加活动。

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

C# 团队意识到了这一限制 - 曾希望这会出现在 C# 6 中,但该功能已被删除。我希望它是因为时间不够而不是真的失去了这个特性而被放弃了——也许我们会在 C# 7 中看到它。

虽然你不能用对象初始值设定项来做到这一点,但你可以这样做:

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

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