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

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,但我觉得我应该通过实现这样的方法来使其可枚举接口。

最佳答案

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

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

function TMyContainerClass.GetEnumerator: TEnumerator<TMyClass>;
begin
  Result := FItems.Values.GetEnumerator;
end;

10-08 08:36