Delphi中TDictionary.ContainsKey即便密钥存在,为何返回false呢?

2026-04-10 20:442阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计392个文字,预计阅读时间需要2分钟。

Delphi中TDictionary.ContainsKey即便密钥存在,为何返回false呢?

我目前面临的问题完全让我觉得自己基本不懂编程。我有一个TDictionary对象,由TDate+对组成。TEvent是一个自定义类。该对象用于两个不同的应用程序共享相同的类(它们之间不通信)。在一个应用程序中,以下内容:

我现在面临的问题完全让我觉得我根本不懂编程.我有一个TDictionary对象,由TDate =>对组成. TEvent(自定义类).该对象用于由两个单独的应用程序共享的类(它们不通信).在一个应用程序中,以下工作正常:

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

另一方面,同一段代码在其他应用程序中不起作用!怎么可能?我附上了调试器中发生的事情的屏幕截图:

如您所见,密钥存在于字典中,但ContainsKey()返回FALSE.

是什么造成的?

问候,
Patryk.

原因是TDate实际上只是一个TDateTime.这意味着它是一个双精度值,保持自德尔福纪元以来的天数. TDate的IDE调试提示只显示日期部分并省略时间部分.您正在比较相等性,因此两个值在同一天,但具有不同的时间组件将不相等.这是一个截图来说明:

通过使用DateOf删除日期时间的时间部分来解决问题.每当收到日期值时,您都必须使用DateOf,并且在添加到字典之前清楚.

Delphi中TDictionary.ContainsKey即便密钥存在,为何返回false呢?

本文共计392个文字,预计阅读时间需要2分钟。

Delphi中TDictionary.ContainsKey即便密钥存在,为何返回false呢?

我目前面临的问题完全让我觉得自己基本不懂编程。我有一个TDictionary对象,由TDate+对组成。TEvent是一个自定义类。该对象用于两个不同的应用程序共享相同的类(它们之间不通信)。在一个应用程序中,以下内容:

我现在面临的问题完全让我觉得我根本不懂编程.我有一个TDictionary对象,由TDate =>对组成. TEvent(自定义类).该对象用于由两个单独的应用程序共享的类(它们不通信).在一个应用程序中,以下工作正常:

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

另一方面,同一段代码在其他应用程序中不起作用!怎么可能?我附上了调试器中发生的事情的屏幕截图:

如您所见,密钥存在于字典中,但ContainsKey()返回FALSE.

是什么造成的?

问候,
Patryk.

原因是TDate实际上只是一个TDateTime.这意味着它是一个双精度值,保持自德尔福纪元以来的天数. TDate的IDE调试提示只显示日期部分并省略时间部分.您正在比较相等性,因此两个值在同一天,但具有不同的时间组件将不相等.这是一个截图来说明:

通过使用DateOf删除日期时间的时间部分来解决问题.每当收到日期值时,您都必须使用DateOf,并且在添加到字典之前清楚.

Delphi中TDictionary.ContainsKey即便密钥存在,为何返回false呢?