2017-01-11 6 views
1

ブレークポイントがヒットしたときにコールスタックがないため(Equals自体と[外部コード]を除く)、私のEqualsメソッドを呼び出すのはわかりません。メソッドが解決された後にEqualsが呼び出されるのはなぜですか?

メソッドGetAllとEqualsを持つUserCompleteクラスと、オブジェクトの配列を受け入れるコンストラクタを含むいくつかのクラスがあります。 UserCompleteはユーザーから継承します。ユーザークラスには、メソッドGetRowsとEqualsが含まれています。私は、サービスコントローラーからのgetAllを呼び出す

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 

のリストに、データベースまたはキャッシュからオブジェクトを()()変換:

に等しい

は特別なものではありません実際に応答を得て問題はありません。そしてそれが完了すると、Equalsのブレークポイントがヒットし、objは1つの値を持つList(Of Integers)です。

この動作が期待されるのはなぜですか? そうでない場合、発生する可能性があり、修正する方法を説明できますか?

答えて

0

私は答えとして数えられるいくつかの情報を持っています。しかし、誰かがコミュニティのための状況の「理由」を説明できるなら、それを答えとしてマークします。

私はこれを一時的にデバッグする手助けをしました(または、このリストが大規模になると決めるかどうかによって永久に)。私は、Equalsメソッドは、セッションは、(ユーザーのうち、日時)辞書です。この

Sessions(u.Key) = DateTime.Now 

の下にコールスタックに落ちることがわかりました。

したがって、単純な答えは、DictionaryアイテムのSystem.Collections.Genericライブラリに値を代入すると、Dictionaryの各キーでEqualsが呼び出されるという単純な答えです。

関連する問題