这主要是一个语法糖/最佳实践问题。
这是一个有问题的代码示例:
if (_instanceData?.DataSourceType != null && Util.IsEntityBacked(_instanceData.DataSourceType) {// code}
我知道如果 _instanceData 为空,安全导航运算符将继续执行,但在这种情况下,条件中的第一个布尔值是否会按预期进行评估?这会成功地对 _instanceData 和 DataSourceType 进行空检查吗?
另一个例子:
if (LockAcquired && _instanceData?.ObjInfo != null) {// code}
在这种情况下,_instanceData 可能为空,也可能不是,但 ObjInfo 为空。仅对对象和属性进行老式的空值检查是更好的做法,还是可以按预期完成工作?
编辑:这个问题更好地描述为:if (obj?.prop != null)
相当于
if (obj != null && obj.prop != null)