2012-02-26 3 views
3

현재 직면하고있는 문제로 인해 전혀 프로그래밍을 이해하지 못하는 느낌이 들었습니다. 난 TDictionaryTDate => TEvent (custom class) 쌍으로 구성되어있는 개체가 있습니다. 객체는 두 개의 개별 응용 프로그램에서 공유하는 클래스에서 사용됩니다 (통신하지 않습니다). 하나의 응용 프로그램에서, 다음이 제대로 작동 : 다른 한편으로키가 존재 함에도 불구하고 TDictionary.ContainsKey가 false를 반환합니다.

// Get recipes from the very event. 
    Tmp := FCalendar.ContainsKey(D); 
    if (Tmp) then 
    begin 
    E := FCalendar[D]; 
    CopyRecipes(E); 
    end; 

는 동일한 코드 조각은 다른 응용 프로그램에서 작동하지 않습니다! 어떻게 가능합니까? 디버거에서 발생한 문제의 스크린 샷을 첨부했습니다. enter image description here

키가 사전에 표시되어 있지만 ContainsKey()FALSE을 반환합니다.

이 문제의 원인은 무엇입니까?

감사합니다. Patryk.

답변

6

이유는 TDate 실제로 단지 TDateTime 것입니다. 즉, Delphi 신기원 이후의 일수를 나타내는 배정도 값입니다. TDate에 대한 IDE 디버그 힌트는 날짜 부분 만 표시하고 시간 부분은 생략합니다. 평등과 같은 날에있는 두 개의 값을 비교하지만 시간 구성 요소가 다르면 평등하지 않습니다. 여기에 스크린 샷을 설명하기 위해입니다 :

enter image description here

날짜 시간의 시간 부분을 제거하는 DateOf를 사용하여 문제를 해결합니다. 날짜 값을 받고 사전에 추가하기 전에 분명히 DateOf을 사용해야합니다.

+0

한 응용 프로그램에서 작동하고 다른 응용 프로그램에서는 작동하지 않는다는 것을 어떻게 설명 할 수 있습니까? – Pateman

+0

'D'와'Key' 캐스트를'TDateTime'으로 보시면 그 차이가 보입니다. 그 코멘트에있는 질문에 관해서는, 당신은 조금 많이 묻고 있습니까? –

+0

사실, 나는 범죄를 의미하지는 않았다. 당신 말이 맞아요. 'DateOf()'를 사용하면 문제가 해결됩니다. 고마워, 데이빗! – Pateman

1

가능성 D에서하지 2011-11-11 아마도 D : = 2011-11-11 00-00-00

+0

무엇을 의미합니까? – Pateman

관련 문제