gpt4 book ai didi

.net - 覆盖带有 ID 的对象的 Equals

转载 作者:行者123 更新时间:2023-12-04 06:11:21 26 4
gpt4 key购买 nike

它是 Equals 的最佳覆盖吗? (在 VB.NET 中)用于具有唯一 ID 的对象?

  Public Overrides Function Equals(ByVal obj As Object) As Boolean
If obj Is Nothing OrElse Not [GetType]().Equals(obj.GetType()) Then
Return False
End If
Dim otherMyObject As MyObject = DirectCast(obj, MyObject)
Return Me.Id = otherMyObject.Id
End Function

我从 MSDN 中拿了这个例子,但不完全确定从所有角度(包括性能)来看是否是更好的解决方案。

编辑:

与这个版本相比如何:
Public Overrides Function Equals(ByVal obj As Object) As Boolean
Dim otherMyObject As MyObject = TryCast(obj, MyObject)
If otherMyObject Is Nothing Then
Return False
Else
Return Me.Id = otherMyObject.Id
End If
End Function

最佳答案

这取决于您所说的“唯一 ID”是什么意思。如果你能保证内存中不会有任何其他具有相同 ID 的对象,你可以从 Object 继承该功能。 .但是,如果您想将相同类型和 ID 的两个对象视为相等,那么这看起来不错。您想覆盖 GetHashCode也不过如此。

您确实需要考虑将使用等式实现的内容以及他们的期望。如果可以有两个具有相同 ID 但其他属性不同的不同对象,那么它们“相等”意味着什么?这合适不合适?

实现 IEqualityComparer(Of T) 可能更有意义例如,类似于“IdEqualityComparer ”类型。这是表达平等关系有用但不一定是“自然的、全面的”平等关系的好方法。

关于.net - 覆盖带有 ID 的对象的 Equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com