c# 9 可以为 null 的引用类型 [已关闭]

c# 9 Nullable reference types [closed]

提问人:Mazza 提问时间:3/8/2023 更新时间:3/8/2023 访问量:132

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

9个月前关闭。

在 c# 9 中,使用 Nullable 引用类型的新功能,我发现自己在每个类属性类型上都放置了“?”以打开警告,然后在代码中将 if != null 放在外面以避免 null 引用(这很好)。 但我想知道,到处发送垃圾邮件“?”是对的吗?

假设我有一个类,它表示具有非可选外键的数据库记录:

public int UserId { get; set; }
public virtual User User { get; set; }

我希望虚拟属性始终不为空(因为它是由实体框架实例化的),所以我不想让它为空以删除类中的警告,而是将其值初始化为“null!然后,我应该将使用此属性的代码包装在 try catch 块中,以便在实体框架无法按预期工作时捕获异常。

你觉得怎么样?垃圾邮件“?”并始终重复 if != null 是否更安全?

C NullReferenceException C#-9.0

评论

5赞 canton7 3/8/2023
使用 C# 11,可以创建这些属性,从而避免此问题。在此之前,如果确定该属性将由某些内容(如 EF 或反序列化程序)初始化,则可以将其声明为 null,然后检查 use sites 是否为 nullrequired= null!
2赞 canton7 3/8/2023
我认为没有必要检查“实体框架是否无法按预期工作”。这只有在开发过程中破坏某些东西时才会发生,如果发生这种情况,很多东西都会灾难性地破坏。您可能会立即发现问题,您添加的任何额外的 try/catch 块可能只会妨碍您。我想说的是,假设 EF 在您的代码中按预期工作是可以的
0赞 YungDeiza 3/8/2023
我立即关闭了我开始:)的任何新项目上的可为 null 的引用类型
1赞 Hans Kesting 3/8/2023
@YungDeiza喜欢调试 NullReferenceExceptions?
4赞 canton7 3/8/2023
那么,你应该喜欢让编译器在你编写任何测试之前警告你可能存在错误的地方;)

答: 暂无答案