在对象初始化期间添加事件处理

我需要将某种类型的实例(将在此刻创建)传递给方法。 这种类型提供了我想订阅的几个事件,所以我的代码如下所示:

var instance = new Instance(); instance.OnEvent1 += (sender, args) => { DoThis(); DoThat(); } instance.OnEvent2 += (sender, args) => DoThisToo(); instance.OnEvent3... MyMethod(instance); 

现在,是否可以在初始化期间添加处理程序? 所以我可以这样写:

 MyMethod((MyType)instance => { instance.OnEvent1 += (sender, args) => { DoThis(); DoThat(); } instance.OnEvent2... }); 

当然,由于美容原因,这仅是期望的。 我喜欢我的代码小而且可读。

现在这是不可能的,但根据Roslyn说法,它是有计划的,并且可能在将来可用。

 -------------------------------------------------------------------------- | Feature | Example | C# | -------------------------------------------------------------------------| | Event initializers | new Customer { Notify += MyHandler }; | Planned | -------------------------------------------------------------------------| 

如果源代码可用,我可以建议您下一个技巧:添加公共属性,其类型为您在集合上获取传入值的事件,并将此处理程序附加到您需要的事件

例如:

 namespace TrickAddEventHandlerInObjectInitializer { class A { public EventHandler AddHandlerToEventByAssignMe { set { Event += value; } } public event EventHandler Event; public void DoSmthAndInvoke() { Event?.Invoke(this, new EventArgs()); } } class Program { static void Main(string[] args) { var a = new A { AddHandlerToEventByAssignMe = A_Event }; a.DoSmthAndInvoke(); } private static void A_Event(object sender, EventArgs e) { throw new NotImplementedException(); } } }