在继承的泛型集合中迭代self时编译错误

时间:2014-02-08 04:52:08

标签: delphi generics for-in-loop

我是Delphi的新手,但我对C#很有经验,他们通常认为这是一件非常容易的事情,但我得到的是

  

“E2430 for-in语句无法对集合类型'类引用'进行操作”

在下面的代码中,我正在做“为自己做的jobActivity”。我只是想在这里尝试不同的东西,但我已经化为乌有!我本以为应该有一些简单的方法来做到这一点,我相信我一定会错过一些东西。有人可以帮忙吗?

type
  TJobActivityDetailCollection = class(TObjectList<TJobActivityDetail>)
    class function ForYear(year: integer):TJobActivityDetailCollection;
  end;

class function TJobActivityDetailCollection.ForYear(year: integer)
                                      :TJobActivityDetailCollection;
var
  returnCollection   : TJobActivityDetailCollection;
  yearStart, yearEnd : TDateTime;
  jobActivity        : TJobActivityDetail;
begin
  yearStart := EncodeDateTime(year,7,1,0,0,0,0);
  yearEnd   := EncodeDateTime(year + 1,6,30,23,59,59,0);

  returnCollection := TJobActivityDetailCollection.Create();

  for jobActivity in self do
  begin
    if (jobActivity.Date > yearStart) and (jobActivity.Date > yearEnd) then
    begin
      returnCollection.Add(jobActivity);
    end;
  end;

  Result := returnCollection;
end;

2 个答案:

答案 0 :(得分:3)

方法中(查看Class Methods文档)Self指针是对类类型本身的引用(此处为TJobActivityDetailCollection),而不是指向类的对象实例的指针。   for..in循环枚举对象实例,而不是类。

解决方案是简单地从方法中删除说明符。

答案 1 :(得分:0)

Delphi中的类函数是静态的C#等价物。您无法从“静态”方法访问self(this)。只需从功能中删除类。