2017-01-11 49 views
1

我不知道什麼在調用我的Equals方法,因爲當發生斷點時沒有調用堆棧(Equals本身和[External Code]除外)。爲什麼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只是從數據庫或高速緩存中的對象()()轉換爲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

好的,我有一些信息可以作爲答案。但是,如果有人能夠解釋社區情況的「原因」,我會將其標記爲答案。

我解開了一些並行性我不得不幫助調試這個臨時(或永久取決於如果我決定這個列表將會擴展很多)。我發現Equals方法屬於此下的調用堆棧,其中Sessions是Dictionary(Of User,DateTime)字典。

所以,簡單的答案是,當爲Dictionary項目分配值時,System.Collections.Generic庫會調用Dictionary中每個鍵的Equals。

相關問題