【发布时间】:2015-07-14 04:58:56
【问题描述】:
编辑经过进一步思考,我决定在下面修改我的答案,以减少对问题的误解的可能性。
我在这个IEnumarable LINQ 查询上得到了一个NullReferenceException:
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
并且运行时在desg.ModifiedBy.Id 上抛出NullReferenceException。但是,我“知道” c# 真实性评估短路(参见,例如,|| Operator)。在这里,如果desg.ModifiedBy == null 那么我们永远不应该评估name.Id == desg.ModifiedBy.Id。尽管如此,这似乎正在发生。这可能吗?
【问题讨论】:
-
@haim770 这是对该行为的唯一可能解释,并且由于问题对于它是否是对象查询的 linq 是模棱两可的,并且只有一种模糊性的解决方案有答案,它是相当安全的假设。
-
-
我们不能一直猜测可能出了什么问题。发布short but complete code demonstrating the problem。在几分钟内得到答案。否则会因为无法复制而被关闭。
-
@Seebiscuit,我已经删除了重复的标志。但如果是针对对象的 LINQ,我不认为 the 问题是可重现的
-
@stefankmitph 因为问题没有提供代码来重现指定的问题并添加了不必要的讨论。顺便说一句,用调试器找到他获得 NRE 的原因相当简单。