MessagePublished?.Invoke(null, new MessageEventArgs(message)); 这一句中的?问号 是什么意思
时间: 2024-02-13 19:01:35 浏览: 26
这个问号是C# 6.0中的空值传播运算符(null-conditional operator),也称为安全导航运算符(safe navigation operator)或短路运算符(null-propagation operator)。它可以帮助我们简化代码并避免空引用异常。
在上面的代码中,`MessagePublished?.Invoke(null, new MessageEventArgs(message));`这行代码是用来触发`MessagePublished`事件的。`?.`这个运算符的作用是:如果`MessagePublished`不为`null`,则调用`Invoke`方法;否则不执行任何操作。这样可以避免因为`MessagePublished`为`null`而导致的空引用异常。
在C# 6.0之前,我们需要使用繁琐的条件语句来判断一个对象是否为`null`,例如:
```csharp
if (MessagePublished != null)
{
MessagePublished.Invoke(null, new MessageEventArgs(message));
}
```
而使用空值传播运算符,则可以简化代码,使其更加简洁。
需要注意的是,空值传播运算符只能用于可空类型或者引用类型,不能用于值类型。
相关问题
item?.Invoke(); 中 '?' 是什么意思
这是 C# 中的 Null 条件运算符(null-conditional operator),也称为“安全导航运算符”(safe navigation operator)。它可以用于在调用一个对象的成员时,避免出现空引用异常(NullReferenceException)。如果对象为 null,则该调用会被短路,不会执行,并且表达式的结果将为 null。如果对象不为 null,则会正常执行该调用。在你提到的例子中,如果 item 对象为 null,那么该语句不会执行,也不会抛出异常。
c#中GetMethod?.Invoke
这段代码使用了C# 6.0的null条件运算符。GetMethod?.Invoke的意思是:如果GetMethod方法返回null,则不会执行Invoke方法,避免了空引用异常。它等效于以下代码:
```
var method = GetMethod();
if (method != null)
{
method.Invoke();
}
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)