我现在面临的问题完全让我觉得我根本不懂编程。我有一个TDictionary
对象,由TDate => TEvent (custom class)
对组成。该对象用于由两个单独的应用程序共享的类(它们不通信)。在一个应用程序中,以下工作正常:
// Get recipes from the very event.
Tmp := FCalendar.ContainsKey(D);
if (Tmp) then
begin
E := FCalendar[D];
CopyRecipes(E);
end;
另一方面,同一段代码在其他应用程序中不起作用!怎么可能?我附上了调试器中发生的事情的屏幕截图:
如您所见,密钥出现在字典中,但ContainsKey()
会返回FALSE
。
造成这种情况的原因是什么?
此致 Patryk。
答案 0 :(得分:6)
原因是TDate
实际上只是TDateTime
。这意味着它是一个双精度值,保持自德尔福纪元以来的天数。 TDate
的IDE调试提示仅显示日期部分,并省略时间部分。您正在比较相等性,因此两个值在同一天,但具有不同的时间组件将不相等。这是一个截图来说明:
使用DateOf
删除日期时间的时间部分来解决问题。每当收到日期值时,您都必须使用DateOf
,并且在添加到字典之前清楚。
答案 1 :(得分:1)
可能在D而不是2011-11-11 可能D:= 2011-11-11 00-00-00