c#在对象实例化期间对事件监听器进行简写绑定?

时间:2017-06-26 18:11:17

标签: c# events instantiation shorthand

我发现在循环中填充列表时,我经常喜欢创建新项目并将其添加到列表中:

foreach(var cat in ctx.InventoryCategories)
{
    pnl_catList.Controls.Add(new RadioButton()
    {
        Text = cat.CategoryName,
        Tag = cat,
        Checked = false,

        // how could I do this?
        Click += onClick(),
    })
}

但我现在知道如何添加事件监听器的唯一方法是漫长的道路:

foreach(var cat in ctx.InventoryCategories)
{
    var newButton = new RadioButton()
    {
        Text = cat.CategoryName,
        Tag = cat,
        Checked = false,
    })

    newButton.Click += onClick();
    pnl_catList.Controls.Add(newButton);
}

这是不好的做法还是有一个很好的简短方法来绑定事件?

1 个答案:

答案 0 :(得分:2)

字段分配和向事件添加成员是两回事。 C#语言允许使用=作为对象初始化运算符,但不允许使用+ =或 - =,它们实现为事件类中幕后的添加和删除函数。这是一种语言选择 - 我相信它是基于不希望在构造函数中包含复杂功能以保持初始化阶段清洁的愿望。

可以解决这个限制,但是没有解决方案更容易理解,并且需要更少的代码行,而不是在初始化对象后简单地添加侦听器。

简而言之,没有简写。