有一个从另一个线程写入的项目列表。
同步删除项目。我在删除部分
中有以下lambdavar deleteList = this.Items.Where(d => d.Id == guid).ToList();
有时,我得到d的NullReferenceException。
我怎样才能了解更多信息?
有关上下文的更多信息
删除或添加时,我有一个简单的锁定锁(myLock) 在添加部分中,我已经检查了该项是否为null(if(item!= null))
在where子句中有一个简单的(d!= null)不会阻止 首先获取null的项目。在我看来 列表应该已经处于“正常状态”。
答案 0 :(得分:1)
线程与否,引用中的引用始终为null。如果要从同一列表中删除项目,则需要在项目(或集合)上设置锁定。
没有多线程:
var deleteList = this.Items.Where(d => d != null && d.Id == guid).ToList();
将这样的集合锁定(注意有各种方法):
lock(this.Items)
{
var deleteList = this.Items.Where(d => d != null && d.Id == guid).ToList();
}
答案 1 :(得分:0)
尝试添加检查以查看d是否为空
d => d != null && d.Id.Equals(guid)