2013-04-09 6 views
3

ContainsKey()TryGetValue()으로 재생할 때 GetHashCode() 및 기타 사항을 수정하는 데 많은 참고 자료를 보았습니다. 그러나 이러한 모든 문제와 예제는 모두 모호한 사용자 별 키.C# Dictionary ContainsKey/TryGetValue가 작동하지 않습니다.

나는 기본이 Dictionary<long, object>입니다. ContainsKey() 또는 TryGetValue() 중 하나를 사용하려고 시도하는 경우 항상 정상적인 결과를 얻지 못하고 누락 된 항목을 채우려 고 시도하는 것으로 이동하지 않습니다 (기술적 인 경우).

당신은 짐작 했었습니다. 기존의 키에 대해 불평합니다. 음, 존재하기 때문입니다.

그렇다면 기본 long 키와 일치하는 문제가있는 이유는 무엇이며 어떻게 작동합니까?

편집 : 코드. 나는 여러 가지 것을 시도했다. 또한

public void Add(long id) 
    { 
     if (AreaDataDict.ContainsKey(id)) return; 

     AreaData ad = new AreaData(id); 
     ad.Load(); 
     AreaDataDict.Add(id, ad); 
    } 

:

public void Add(long id) 
{ 
    AreaData areaData; 
    if (AreaDataDict.TryGetValue(id, out areaData)) return; 

    AreaData ad = new AreaData(id); 
    ad.Load(); 
    AreaDataDict.Add(id, ad); 
} 

편집 2 : 자신의 가장 기본적인 형태에서 어떤 주요 변경 사항이 발생하지 않습니다. 값을 찾지 못하면 추가하는 것 외에는 데이터가이에서만 읽혀집니다.

+4

실제로 실패하면 예제 코드로 제공 할 수 있습니까? 우리가 문제를 재현 할 수 없으면 그냥 짐작할뿐입니다. – MarcinJuraszek

+3

저는 99.99 %의 코드에서이 버그를 발견했습니다. 유감스럽게도 해당 코드를 제공하지 않으므로 도움을받을 수 없습니다. 문제를 보여주는 짧지 만 완전한 프로그램을 제공하십시오. 우리는 그것의 예제를 쉽게 * 제공 할 수 있지만 그 누구도 놀라지 않을 것입니다. –

+1

코드 예는 매우 유용합니다. 우리는 짐작할 수 있습니다. –

답변

1

ConcurrentDictionary을 사용하면 고맙게도 user454076에서 영감을 얻었습니다.