【发布时间】:2017-01-11 22:05:15
【问题描述】:
我不知道是什么在调用我的 Equals 方法,因为当断点被击中时没有调用堆栈(除了 Equals 本身和 [外部代码])。
我有一个 UserComplete 类,它具有 GetAll 和 Equals 方法以及其他一些方法,包括接受对象数组的构造函数。 UserComplete 从用户继承。用户类包括方法 GetRows 和 Equals。
Equals 没什么特别的:
Public Overrides Function Equals(obj As Object) As Boolean
If Not MyBase.Equals(obj) Then
Return False
End If
Dim u As UserComplete = CType(obj, UserComplete)
Return Me.RoleIds.Equals(u.RoleIds)
End Function
GetAll 只是将数据库或缓存中的 object()() 转换为 UserComplete 列表
Public Function GetAll() As IList(Of UserComplete)
Dim rows As Object()() = GetRows()
If IsNothing(rows) Then
Return Nothing
End If
Dim completeUsers As List(Of UserComplete) = (From u In rows Select New UserComplete(DirectCast(u, Object()))).ToList()
If IsNothing(completeUsers) OrElse Not completeUsers.Any() Then
Return Nothing
End If
Return completeUsers
End Function
我从服务控制器调用 GetAll 并实际得到响应,没问题。然后完成后,在 Equals 中的断点被命中,并且 obj 是一个 List(Of Integers) 具有一个值。
如果您期望这种行为,为什么? 如果没有,您能否解释一下为什么会发生这种情况以及如何解决?
【问题讨论】:
标签: vb.net overriding equals-operator