GDS*_*GDS 8 c# c#-6.0 null-conditional-operator
在主要性能和易用性或清晰度等方面,以下两种等效方式对于零条件运算符最佳?
这个:
idString = child?.Id;
fatherName = child?.Father?.Name;
motherName = child?.Mother?.Name;
Run Code Online (Sandbox Code Playgroud)
或者(假设所有本地变量都已为空)这:
if (child != null)
{
idString = child.Id;
fatherName = child.Father?.Name;
motherName = child.Mother?.Name;
}
Run Code Online (Sandbox Code Playgroud)
性能甚至是一个问题吗?
性能甚至是一个问题吗?
简短回答:关于空检查的性能永远不会成为普通应用程序中的问题.这只是可读性和可维护性的问题.
性能:
是的,您对1进行了3次"明确"检查.但您必须记住:
我只看到显著的性能差异远程可能性:如果child还是Mother或Father不是本地变量或简单的纯性质,但方法和属性有很长的执行时间.例如,一个GetChild()需要2秒才能执行的方法.你能看到一个真实的场景吗?我不能.即使是这种情况,您也可以调用GetChild()一次并将其分配给局部变量,然后调用child?3次.
可读性:
单个初始if允许在心理上分离不同的代码块.假装是代码的读者,不知道其他任何事情:问自己是否更简单的阅读"如果孩子不是空的做所有这些操作和东西,否则只是继续",或"如果孩子不是空的检查姓名.如果孩子不是空的,请检查母亲.如果母亲不是空的,请获取母亲的姓名.然后,如果孩子不是空的,请检查父亲.如果父亲不是空...... ......".
可维护性:
在这种情况下,Aka是DRY原则.例如,为什么要重复3次空检?假设在将来的某个时刻你的老板要求你改变一个代码:它不仅要检查一个孩子的无效,还要检查它Id是否为0(这样的事情在任何软件开发过程中经常发生) .在您的第一个代码部分,您应该纠正3行.在你的第二个代码部分,你应该只纠正一行:初始if.
编辑:
有关null条件运算符的线程安全性的讨论,请参阅此问题.
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |