2016-11-01 99 views
3

有我的代码(它是在核心网项目中使用):空条件运算符和LINQ

var list = await user.RelatedEntityCanBeNull?.ToListAsync(); 

它引发的NullReferenceException如果RelatedEntityCanBeNull为空的用户。为什么表达式不返回null?

+1

谈到访问'user'性质,应该不会是'用户.RelatedEntityCanBeNull .ToListAsync();?' ?你访问没有空条件运算符的'user',它是空的,它会给出一个错误。但是,我不确定'await'如何处理'null'任务。 –

+3

我怀疑这是因为你在这里等待一个null Task。 –

+0

@Yeldar Kurmangaliyev,我明确地检查了用户。它不是null – Mergasov

回答

4

等待操作员期望等待Task对象。空条件运算符返回nullawait null结果为NullReferenceException

您必须更改您的代码

List list = null; 
if (user?.RelatedEntityCanBeNull != null) 
    list = await user.RelatedEntityCanBeNull.ToListAsync(); 

var list = user?.RelatedEntityCanBeNull == null ? null : await user.RelatedEntityCanBeNull.ToListAsync(); 
+2

或'await(user.RelatedEntityCanBeNull?.ToListAsync()?? Task.FromResult <...>(null));更简洁。 –

+0

@ stop-cran:好点 –

+0

@ stop-cran即使在表达式如下这样的表达式中存在长链属性时,您的决定也让它逃离手动空 - 检查:user.First?.Second?... great – Mergasov