C#6.0多个相同的空条件运算符检查与单个传统检查
在主要性能和易用性或清晰度等方面,以下两种等效方式对于零条件运算符最佳?
这个: idString = child?.Id; fatherName = child?.Father?.Name; motherName = child?.Mother?.Name; 或者(假设所有本地变量都已为空)这: if (child != null) { idString = child.Id; fatherName = child.Father?.Name; motherName = child.Mother?.Name; } 表现甚至是个问题吗? 解决方法
简短回答:关于空检查的性能在普通应用程序中永远不会成为问题.这只是可读性和可维护性的问题. 性能: 是的,您对1进行了3次“明确”检查.但您必须记住: >每次引用对象实例时,系统都会执行“隐式”空值检查,如here所述,并且JIT根本不优化空值检查.所以在你的情况下,费率不仅仅是3比1. 我看到只有很大的性能差异的可能性:如果child或Mother或Father不是局部变量或简单的普通属性,而是具有很长执行时间的方法和属性.例如,GetChild()方法需要2秒才能执行.你能看到一个真实的场景吗?我不能.即使是这种情况,您可以一次调用GetChild()并将其分配给局部变量,然后调用child? 3次. 可读性: 单个初始if允许在心理上分离不同的代码块.假装是代码的读者,不知道其他任何事情:问自己是否更简单的阅读“如果孩子不是空的做所有这些操作和东西,否则只是继续”,或“如果孩子不是空检查姓名.如果孩子不是空的,请检查母亲.如果母亲不是空的,请获取母亲的姓名.如果孩子不是空的,请检查父亲.如果父亲不是空…… ……“. 可维护性: 在这种情况下,Aka是DRY principle.例如,为什么要重复3次空检?假设在未来的某个时刻,你的老板会要求你更改代码:不仅需要检查孩子的无效性,还要检查其ID是否为0(在任何软件开发过程中都会经常发生这种情况) ).在您的第一个代码部分中,您应该纠正3行. 编辑: 有关null条件运算符的线程安全性的讨论,请参阅this question. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |