我有以下代码将枚举移交给私有字段:
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
,但我觉得我应该使它成为一个合适的通过实现这样的接口可以枚举。
答案 0 :(得分: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;