2

我有以下代码将枚举交给私有字段:

interface

type    

TMyClassEnumerator = class(TEnumerator<TMyClass>)
end;

TMyContainerClass = class(TObject)
private
  FItems: TObjectDictionary<string, TMyClass>;
public
  function GetEnumerator: TMyClassEnumerator;
end;

implementation

function TMyContainerClass.GetEnumerator: TMyClassEnumerator;
begin
  Result := TMyClassEnumerator(FItems.Values.GetEnumerator);
end;

我这样做对吗?我为实现或创建自己的接口而奋斗IENumerable<TMyClass>,但是,我没有编译它......上面的代码确实适用于例如for..in,但我觉得我应该通过实现这样的接口使其成为一个适当的可枚举。

4

1 回答 1

3

您的方法是合理的,但我认为您不需要强制转换或确实声明一个枚举器类。我会这样做:

TMyContainerClass = class
private
  FItems: TObjectDictionary<string, TMyClass>;
public
  function GetEnumerator: TEnumerator<TMyClass>;
end;

function TMyContainerClass.GetEnumerator: TEnumerator<TMyClass>;
begin
  Result := FItems.Values.GetEnumerator;
end;
于 2013-02-02T13:57:06.620 回答