C#invokethis,,做什么?

问题描述

我正在学习编程(通过在线资源进行自我学习),并且遇到了这段代码。我很难理解。我不只了解最后一行OnItemAdded?.Invoke(this,item)

public async Task AddItem(TodoItem item)
{
   await CreateConnection();
   await connection.InsertAsync(item);
   OnItemAdded?.Invoke(this,item);
}

我搜索并阅读了许多资源(在MSN和此处),如果我正确理解了这部分代码,那么这部分代码会检查OnItemAdded是否不为null,然后再次执行这部分代码?如果无法将项目添加到列表中,OnItemAdded是否不为null?我是否正确阅读并理解此行?

解决方法

请参阅this answer,了解为何使用空检查。在c#6.0之前,优良作法是在调用之前将引用复制到局部变量。这将有助于多线程和订阅者在空检查和调用之间退订。

此表单有两个原因:

  • if evt!= null检查确保我们不会尝试调用null 代表。如果没有人将事件处理程序连接到 活动
  • 在多线程方案中,由于委托是 一旦我们将委托的本地副本获取到evt中, 我们可以在检查非空值后安全地调用它,因为没有人可以 在if之后但在通话之前进行更改。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...