2017-01-11 9 views
1

내 Equals 메서드를 호출하는 이유를 모르겠습니다. 중단 점에 도달하면 호출 스택이 없기 때문입니다 (Equals 자체와 [External Code] 제외).메서드가 해석 된 후에 Equals가 호출되는 이유는 무엇입니까?

GetAll 및 Equals 메서드가있는 UserComplete 클래스와 개체 배열을 받아들이는 생성자를 포함한 일부 클래스가 있습니다. UserComplete는 User로부터 상속받습니다. 사용자 클래스에는 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는 하나의 값을 갖는 List (Of Integers)입니다.

이 동작이 예상되는 이유는 무엇입니까? 그렇지 않은 경우 왜 발생했는지 및 문제를 해결하는 방법을 설명 할 수 있습니까?

답변

0

좋아, 답으로 간주 될 수있는 정보가 있습니다. 그러나 누군가가 커뮤니티의 상황에 대한 "이유"를 설명 할 수 있다면 그 대답으로 표시 할 것입니다.

일부 병렬 처리를 임시로 디버깅하는 데 도움이되었습니다 (또는이 목록을 많이 확장하려고 결정할 경우 영구적으로 사용). 나는 Equals 메서드는 세션 (사용자, 날짜 시간)을 사전 인이

Sessions(u.Key) = DateTime.Now 

에서 호출 스택에 빠진다 것을 발견했다.

그래서 간단한 값은 사전 항목 System.Collections.Generic 라이브러리에 값을 할당하면 사전의 각 키에 대해 같음이 호출된다는 것입니다.