为什么在 Azure 函数中升级到 net7.0 后收到“可能的空引用分配”?

Why am I getting "Possible null reference assignment" after upgrading to net7.0 in my Azure function?

提问人:chuckd 提问时间:6/3/2023 最后编辑:chuckd 更新时间:6/3/2023 访问量:75

问:

我将我的 Azure 函数从 net6.0 升级到 7,现在我收到了很多如下警告,这些警告困扰着我可能的 null 引用。

我知道为什么会有警告,但为什么现在才升级到net7.0?

问题 - C# 是否希望我以某种方式纠正此问题,或者我可以做些什么来抑制这些警告?

我知道我可以做一个像这样的检查

if (somevalue is not null)

但是我到处都是条件语句,我不想要/不需要!

这里电子邮件是可以为空的。

enter image description here

来自同一 Azure 函数的另一个示例

enter image description here

上面的电子邮件来自身份,我总是在用户注册时收集这些数据,所以它永远不会为空,但我无法更改它的可空性。

所以我可以这样做来修复它enter image description here

但这是他们现在想要的吗?

C# NullReferenceException net-7.0

评论

0赞 Sami Kuhmonen 6/3/2023
您可以根据警告标识符禁止显示警告,但当然最好的办法是确保检查存在。当新版本发布时,默认值和检查会发生变化,所以这就是它现在抱怨的原因。在后一个屏幕截图中,您甚至不需要任何单独的ifs,例如,您可以使用而不是崩溃。int.TryParse()
0赞 chuckd 6/3/2023
实际上,我能够通过使用“jsonObject[”value“]?来修复后面的例子。ToString(),但还有很多我不想要或不需要检查的其他值,例如。IdentityUser ->电子邮件,如第一个示例所示。我不需要检查此值 500 次,因为此值始终在用户创建登录名时填充,即使它在 SQL 表中是可为 null 的类型
0赞 B.O.B. 6/3/2023
我猜“为什么”是对新的空引用类型语法的支持是一个持续的过程。因此,加班支持将被添加到现有的代码库中,并且在升级时,您将遇到不使用 null 引用类型的东西,现在使用,现在会导致出现警告。
0赞 B.O.B. 6/3/2023
@user1186050顺便说一句,新的 null 引用类型是完全可选的。您可以在项目设置文件中选择退出。整个 null 引用类型只是编译器糖 - 它试图猜测它认为您可能会遇到 null 引用异常的位置,因为您没有先检查某些内容是否为 null,然后警告您。但是,它实际上并不能阻止 null 进入代码路径。
0赞 chuckd 6/3/2023
@B.O.B 嗨,鲍勃,我刚刚更新了我的帖子以反映最烦人的警告,与身份类上的身份和电子邮件以及用户名有关。也许你可以就此提出建议?

答: 暂无答案