我有以下代码将枚举移交给私有字段:
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;