![]() |
1
5
我总是发现编写带有null处理的静态运算符更容易,并且让Equals用“this”作为参数之一重写重载运算符的调用。 从…起 Guidelines for Overloading Equals() and Operator == (C# Programming Guide)
|
![]() |
2
2
这就是ReSharper创建相等运算符和实现相等运算符的方式
|
![]() |
3
1
检查null并返回false。如果其中一个操作数为null,则等于应始终为false; |
![]() |
4
1
我认为这比在检查null之前强制转换到Object要简单一些:
|
![]() |
5
1
其他答案很好地解决了一般问题。 但是,您自己的代码可以简化为一个相对简单的解决方案。。。
首先,在你开始工作的时候
这被称为“工作太辛苦”。
如果
假设
一个有用的快捷方式是使用
所以你可以写这个:
还有一点是,这也可以处理以下情况:
一旦你通过了考试
可以简化-因为你知道如果
如果这个测试失败了,那么你知道
|
![]() |
6
0
|
![]() |
7
0
我使用了以下方法,它似乎对我很有效。事实上,Resharper建议采用这种方法。
|
![]() |
8
0
我更喜欢在Equals(T)方法中执行所有比较逻辑,并将操作符重载中的“if this或thas为null,else…”留给框架。
重写运算符重载唯一棘手的事情是,您不能再在Equals实现中使用这些运算符,例如与
遵循MSDN中的双点示例 Guidelines for Overriding Equals() and Operator == 本文中,这是我在实现类型的值相等时生成的模式:
上面的表单是最安全的实现,因为它只是将字段相等性检查转发给框架,并且不需要知道字段是否重载相等运算符。在您知道存在过载的情况下,完全可以简化此过程:
另见
What is the best algorithm for an overridden GetHashCode?
实施
|