有我的代码(它是在核心网项目中使用):空条件运算符和LINQ
var list = await user.RelatedEntityCanBeNull?.ToListAsync();
它引发的NullReferenceException如果RelatedEntityCanBeNull为空的用户。为什么表达式不返回null?
有我的代码(它是在核心网项目中使用):空条件运算符和LINQ
var list = await user.RelatedEntityCanBeNull?.ToListAsync();
它引发的NullReferenceException如果RelatedEntityCanBeNull为空的用户。为什么表达式不返回null?
等待操作员期望等待Task
对象。空条件运算符返回null
和await null
结果为NullReferenceException
。
您必须更改您的代码
List list = null;
if (user?.RelatedEntityCanBeNull != null)
list = await user.RelatedEntityCanBeNull.ToListAsync();
或
var list = user?.RelatedEntityCanBeNull == null ? null : await user.RelatedEntityCanBeNull.ToListAsync();
或'await(user.RelatedEntityCanBeNull?.ToListAsync()?? Task.FromResult <...>(null));更简洁。 –
@ stop-cran:好点 –
@ stop-cran即使在表达式如下这样的表达式中存在长链属性时,您的决定也让它逃离手动空 - 检查:user.First?.Second?... great – Mergasov
谈到访问'user'性质,应该不会是'用户.RelatedEntityCanBeNull .ToListAsync();?' ?你访问没有空条件运算符的'user',它是空的,它会给出一个错误。但是,我不确定'await'如何处理'null'任务。 –
我怀疑这是因为你在这里等待一个null Task。 –
@Yeldar Kurmangaliyev,我明确地检查了用户。它不是null – Mergasov