【发布时间】:2020-06-23 07:47:57
【问题描述】:
如果我们有 2 个对象,并且我们重载了一个相等运算符来比较每个对象,我们是否应该厌倦使用 ?运算符(例如 firstObject?.MyProperty == secondObject?.MyProperty)如果我们最终在 20-30 个属性上使用它?
基本上对于有很多属性的大对象,是不是做下面的比较比较好
(firstObject == null && secondObject == null || !(firstObject == null ^ secondObject == null))
&& (<property comparisons without ?>)
或者干脆
<property comparisons with ?>
谢谢。
【问题讨论】:
-
当您将其加载到执行十亿次相等检查的循环中时,性能测试的结果是什么?
-
如果字段很多,先检查整个对象的
null比较干净,避免重复代码 -
没有比这更好的了,因为你没有给出可以更好的领域。空条件会产生更多的 IL,但看起来更整洁。然而,两者都做同样的事情。综上所述,性能上的任何差异都可以被优化掉
-
我想这归结为一个问题“生产系统完成十亿次合法比较之前需要多少小时/天/年,节省的 9 秒锣值不值得?它与代码的清洁度相比……”。如果 prod 做 10 亿比较一个小时,它可能代表一个合理的节省;如果在比较计数被击中之前它已经运行了一年,那么它不值得丑陋(恕我直言)
-
@TheGeneral Null-conditional (aka "Elvis operator") 生成 less IL。
标签: c# .net performance .net-core operator-overloading