2012-02-26 20 views
3

私が直面している問題は、全くプログラミングが理解できないように感じました。私はTDictionaryのオブジェクトを持っていて、それはTDate => TEvent (custom class)のペアから成っています。オブジェクトは、2つの別々のアプリケーションによって共有されるクラスで使用されます(通信しません)。あるアプリケーションでは、次のコードが正しく動作します。キーが存在していても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。 Dでの可能性

答えて

6

理由はTDateが実際にちょうどTDateTimeであるということです。つまり、デルファイ時代からの日数を保持する倍精度値です。 TDateのIDEデバッグヒントは日付部分のみを表示し、時刻部分は省略します。あなたは平等と同じ日の2つの値を比較していますが、異なる時間要素を持つことは同じではありません。

enter image description here

を日付時刻の時間部分を削除するDateOfを使用して問題を解決する:ここで説明するスクリーンショットです。日付値を受け取ったときはいつでも、辞書に追加する前に明確にDateOfを使用する必要があります。

+0

1つのアプリケーションで動作し、他のアプリケーションでは動作しないことをどのように説明できますか? – Pateman

+0

'D'と' Key'キャストを 'TDateTime'と見てみましょう。そのコメントの質問に関しては、あなたは少しだけ質問していますか? –

+0

確かに、私は犯行を意味しませんでした。あなたは正しい、そうだった。 'DateOf()'を使うと問題は解決します。ありがとう、デイビッド! – Pateman

1

ない2011-11-11 おそらくD:= 2011-11-11 00-00-00

+0

どういう意味ですか? – Pateman

関連する問題