在 Net6 IF 语句中取消引用可能为空的引用

Posted

技术标签:

【中文标题】在 Net6 IF 语句中取消引用可能为空的引用【英文标题】:Dereference of a possibly null reference inside Net6 IF statement 【发布时间】:2021-12-03 16:33:44 【问题描述】:

在我的项目定义中使用带有 <Nullable>enable</Nullable> 的 NET 6:

if (!(await _context?.Applications.AnyAsync())) 


我得到提示“_context 可能在此处为空”,这就是我在其上使用 ? 的原因。

我收到警告:

Dereference of a possibly null reference.

我也试过了:

if (!(await _context?.Applications.AnyAsync()) ?? false) 


但这不会编译。我该如何解决这个问题?

【问题讨论】:

我认为这是因为可能是不可等待的 null 案例。 这里真正的问题是这样的上下文在这种情况下为空似乎并不明智。 它是可空的这是你的代码的真正问题,而不是如何处理可能的空值。 在等待之前进行检查,并在上下文 IS 为空时处理需要发生的情况。即return 或抛出空参考。 【参考方案1】:

试试这个:

if (_context != null && !(await _context.Applications.AnyAsync())) 


【讨论】:

以上是关于在 Net6 IF 语句中取消引用可能为空的引用的主要内容,如果未能解决你的问题,请参考以下文章

检查指针是不是为空,然后在同一个 if 语句中取消引用它是不是安全?

C: Cppcheck : 可能的空点取消引用

if语句表达式中的php数组取消引用[重复]

php 判断一个字段是不是为空,为空的话执行一段sql语句

sql查询不为空的字段

在查询SQL语句中为空或不为空怎么写