我是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;
答案 0 :(得分:3)
在类方法中(查看Class Methods文档)Self
指针是对类类型本身的引用(此处为TJobActivityDetailCollection
),而不是指向类的对象实例的指针。
for..in
循环枚举对象实例,而不是类。
解决方案是简单地从方法中删除类说明符。
答案 1 :(得分:0)
Delphi中的类函数是静态的C#等价物。您无法从“静态”方法访问self(this)。只需从功能中删除类。