首页 > 解决方案 > 我可以在不明确检查 null 的情况下安全地对可能为 null 的属性进行赋值吗?

问题描述

给定如下代码:

a.b.c = 12;

有没有办法使用运算符 like?.??安全地处理 that aor bis的情况,null在这种情况下什么也不做。a?.b?.c = 12给出编译器错误,大概是因为 L 值可能为 null 并且您不能分配给 null。

我正在使用 C# 7.3,因此??=运算符不可用,但即使是,我认为这不是解决方案。是否有可能或必须进行明确的检查?

标签: c#

解决方案


正如@user2864740 在他的回答中所写 - c# 语言不支持这样的事情。
你可以用 c# 编写它的最简洁的方式可能是这样的:

if (A?.B is null) A.B.C = 12;

然而,我发现需要这样一个空安全的属性分配相当奇怪——我的意思是,如果你需要填充某个实例的属性,那么你肯定需要那个实例实际存在——并且如果BA此时为 null ,您的程序可能不应该简单地忽略它并将A.B.C = 12;其视为 NO-OP - 而是抛出NullReferenceException.

话虽这么说,您不希望看到NullReferenceException在生产代码中被抛出,而是希望以这样的方式编写代码,它会是空安全的。

恕我直言,处理这种情况的方法不是避免对属性赋值 - 而是在尝试填充属性之前确保持有该属性的引用实际上不为空。


推荐阅读