我无法弄清楚这个NullReferenceException来自哪里

时间:2015-05-04 17:38:21

标签: c# .net linq boolean

编辑经过进一步思考后,我决定修改下面的答案,以减少误解问题的可能性。

我在NullReferenceException LINQ查询中获得了IEnumarable

designations.ForEach(desg => 
desg.ModifiedBy.UserName = userNames.SingleOrDefault(name => 
  desg.ModifiedBy != null && name.Id == desg.ModifiedBy.Id) != null ? 
  userNames.SingleOrDefault(name => name.Id == desg.ModifiedBy.Id).UserName : 
  "Not Available");

我现在最好的猜测是它来自上面代码第三行的以下声明:

desg.ModifiedBy != null && name.Id == desg.ModifiedBy.Id

并且运行时在NullReferenceException上抛出desg.ModifiedBy.Id。但是,我知道" c#truth-ness评估短路(参见,例如,|| Operator)。在这里,如果desg.ModifiedBy == null,那么我们永远不应该评估name.Id == desg.ModifiedBy.Id。尽管如此,这似乎正在发生。这可能吗?

1 个答案:

答案 0 :(得分:1)

我认为你在价值分配时得到了空白

desg.ModifiedBy.UserName = userNames.SingleOrDefault(name =>