我不知道调用我的Equals方法是什么,因为当遇到断点时没有调用堆栈(除了Equals本身和[External Code])。
我有一个UserComplete类,它有GetAll和Equals方法,还有一些包括接受一个对象数组的构造函数。 UserComplete从用户继承。用户类包括GetRows和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)。
如果您期望这种行为,为什么? 如果没有,你能解释它为什么会发生以及如何解决它吗?
答案 0 :(得分:0)
好的,我有一些可能算作答案的信息。但是,如果有人可以解释社区情况的“原因”,我会将其标记为答案。
我解除了一些并行性,我不得不暂时帮助调试(或者永久取决于我是否决定这个列表是否会扩展很多)。我发现Equals方法属于这个
下的调用堆栈Sessions(u.Key) = DateTime.Now
其中Sessions是一个Dictionary(Of User,DateTime)。
因此,简单的答案是,当为Dictionary项目赋值时,System.Collections.Generic库会在Dictionary中的每个键上调用Equals。