可空类事件(取消)订阅是否支持简化语法的技术问询
事件订阅/取消订阅的简化写法可行性
当然可以!从C# 6版本开始,就支持用空条件运算符?.来简化事件的订阅和取消订阅操作,完全能替代你原来的if判断写法,让代码更简洁。
简化写法示例
- 订阅事件:
eventGeneratingClass?.myEvent += myHandler; - 取消订阅事件:
eventGeneratingClass?.myEvent -= myHandler;
原理说明
空条件运算符?.在这里的作用是短路判断:如果eventGeneratingClass为null,那么?.后面的事件访问和订阅/取消操作会直接被跳过,不会执行,完全等价于你原来写的if (eventGeneratingClass != null)判断逻辑,同时避免了NullReferenceException的风险。
和原写法的对比
原来的冗余写法:
if (eventGeneratingClass != null) { eventGeneratingClass.myEvent += myHandler; }
简化后的写法不仅代码量更少,可读性也更强,和你用myEvent?.Invoke(this, new EventArgs())触发事件的简化思路完全一致。
需要注意的是,这个特性要求你的项目使用C# 6及以上版本,如果是更早的版本,就只能用传统的if判断写法啦。
内容的提问来源于stack exchange,提问作者Lanting
相关产品推荐
相关产品推荐

