【发布时间】:2016-04-27 09:44:29
【问题描述】:
首先,我为这个问题中使用的标题道歉,因为我什至不知道如何问它,也不知道如何搜索它,所以它可能在某个地方,类似于这个的问题一。
我最近在 Visual Studio 2015 上遇到了一个我以前从未见过的潜在修复。在构建EventHandlers 时,我通常会这样做:
public event EventHandler MyEvent;
internal void onMyEvent(EventArgs eventArgs) {
if(MyEvent != null) {
MyEvent(this, eventArgs);
}
}
但现在,Visual Studio 2015 使 if 语句和相应的括号变灰,并且在悬停时显示一条消息,指出可以简化委托调用。简化版如下所示:
public event EventHandler MyEvent;
internal void onMyEvent(EventArgs eventArgs) {
MyEvent?.Invoke(this, eventArgs);
}
这究竟是如何工作的?如果'?' 之前的表达式为空,是否会因为调用null 之外的方法或代码停止 执行而抛出Exception?
另外,我是否可以将检查变量/方法/方法是否为 null 的每个 if 语句替换为“?”,而不考虑代码的可读性?
旁注:我假设这是来自 C# 的新版本 6.0,因为我以前从未见过它。如果我错了,请纠正我
【问题讨论】:
-
又叫空条件运算符
-
这比我预期的要简单得多。感谢@allan 的帮助。我现在将发布这个问题的答案。
-
FWIW 您调用事件的旧方式并不是最好的——最终订阅者有可能在您检查 null 和调用事件处理程序之间取消订阅,从而导致 NRE。您应该先复制它,然后再检查它是否为空,see the first example here。
-
@JamesThorpe 因为我从来没有遇到过使用该代码的问题,所以我从来没有想过这个问题,但是感谢您提供的信息,尽管从现在开始我可能不再需要它了。
标签: c# visual-studio c#-6.0