这个lambda变量怎么能为null?

时间:2012-07-26 07:54:57

标签: c# linq list where nullreferenceexception

有一个从另一个线程写入的项目列表。

同步删除项目。我在删除部分

中有以下lambda
var deleteList = this.Items.Where(d => d.Id == guid).ToList();

有时,我得到d的NullReferenceException。

我怎样才能了解更多信息?

有关上下文的更多信息

删除或添加时,我有一个简单的锁定锁(myLock) 在添加部分中,我已经检查了该项是否为null(if(item!= null))

在where子句中有一个简单的(d!= null)不会阻止 首先获取null的项目。在我看来 列表应该已经处于“正常状态”。

2 个答案:

答案 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)