问题描述
我正在学习编程(通过在线资源进行自我学习),并且遇到了这段代码。我很难理解。我不只了解最后一行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之后但在通话之前进行更改。