c# - 有没有像事件..按钮这样的空条件运算符?.单击 +=(ss,ee)
问题描述
为什么事件没有空条件运算符?
例如,如果对象不为空,我有以下代码引发事件:
Button TargetButton = null;
if(IsRunning)
{
TargetButton = new ....
}
TargetButton?.Click +=(ss,ee)=>{...}
// Compile-time error
// The event 'EditorButton.Click' can only appear on the left hand side of += or -=
简要地 :
有其他选择吗?比平时使用if(TargetButton != null ) ... raise event
为什么事件没有空条件运算符。它接受 null 吗? http://prntscr.com/pv1inc
解决方案
该问题与事件无关。
如果引用为空,则空条件运算符将停止评估。
它不适用于作业的左侧或右侧。
如果你有:
public class Test
{
public int Value;
public void Method() { }
}
你不能写:
Test v;
v?.Value = 10;
int a = v?.Value;
因为如果 v 为 null,则不会评估 v.Value。
那么该怎么办
= 10
呢?或者怎么办
a
?
因此,在为空时为空的事件变量添加或删除事件处理程序时也是如此。
因此编译器错误不允许这样的写作。
这就是为什么你不能写:
TargetButton?.Click +=(ss,ee)=>{...}
因为(ss,ee)=>{...}
如果TargetButton
为空怎么办?
你可以说你希望编译器忽略它。
但是编译器不允许做这种不干净的事情。
我们可以写的是:
v?.Test();
这里是 v 是 null 方法没有被调用,一切都很好,因为编译器不知道该怎么做。
int a = v?.Value ?? 0;
这里如果 v 为空,则使用 0。
推荐阅读
- c++ - 如何放弃或取消 std::thread
- node.js - Arduino和nodejs脚本之间的通信出现未知错误
- c# - 使用 ToList() 将 SQL 查询转换为 LINQ
- reactjs - 在 Gatsby 中将 HTTP 流量重定向到 HTTPS
- python - 如何在某些坐标上将多个图像叠加到基础图像上?
- python - 为什么我的 for 循环会覆盖我以前在字典中的值?(python3)
- java - 控制台只显示文件的文件名和内容,而不是只显示内容
- macos - 反复用透明黑色绘制的褪色图形在莫哈韦停止工作
- caching - 主屏幕添加 (A2H) 是否曾经是浏览器在存储空间不足时推迟 PWA 缓存清除的信号?
- python - 使用 matplotlib LineCollection,不显示特定坐标的线