【问题标题】:How do I declare a TDictionary enumerator? [closed]如何声明 TDictionary 枚举器? [关闭]
【发布时间】:2008-11-28 18:58:00
【问题描述】:

我有一个 TDictionary,它存储了一堆按名称索引的对象,我希望能够检查所有对象。所以我尝试了这个:

var enumerator: TMyObject;
begin
   for enumerator in myDictionary do

但这不会编译。 "不兼容的类型:'TMyObject' 和 'TPair'

所以我尝试了一些不同的方法:

var enumerator: TPair<string, TMyObject>;

那也没有编译。这个错误信息就更奇怪了:Incompatible types: 'TPair' and 'TPair'

显然我需要某种时髦的语法来用 for .. in 循环枚举我的字典。有人知道如何正确声明吗?

编辑:Fabio Gomes 给出了一个可以正常工作的示例,但我的代码仍然无法使用他的方法进行编译。也许是因为我在不同的单位工作?字典和它用于 Value 端的类都定义在一个单元中,而这段代码在别处。这是否使它成为编译器中的错误?任何人都可以验证这一点吗?

编辑 2:发现问题。 http://qc.embarcadero.com/wc/qcmain.aspx?d=69461如果有人感兴趣的话。

【问题讨论】:

  • 这个问题真的跑题了吗?
  • @mjn:我这样关闭它是因为没有“结果我的代码没问题;这是编译器错误”关闭原因。

标签: delphi generics dictionary delphi-2009


【解决方案1】:

这正如预期的那样工作:

var
  Enum: TPair<string, TForm>;
  MyDict: TDictionary<string, TForm>;
begin
  MyDict := TDictionary<string, TForm>.Create;
  try
    MyDict.Add('Form1', Self);
    for Enum in MyDict do
      ShowMessage(Enum.Key);
  finally
    MyDict.Free;
  end;

将此代码粘贴到任何表单的 FormCreate 事件中,您自己看看。

【讨论】:

猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多