0

Delphi2010 编译我的 TObjectListEnumerator 类没有错误,但 DelphiXE3 给出编译器错误:E2089: Invalid typecast

这有什么问题?

    TObjectListEnumerator<T> = class
      private
        fList     : TObjectList;
        fIndex    : integer;
        fMaxIndex : integer;
        function GetCurrent : T;
      public
        constructor Create(List: TObjectList);
        function MoveNext : Boolean;
        property Current  : T read GetCurrent;
      end;

    constructor TObjectListEnumerator<T>.Create(List: TObjectList);
    begin
      inherited Create;
      fList     := List;
      fIndex    := -1;
      fMaxIndex := fList.Count-1;
    end;

    function TObjectListEnumerator<T>.MoveNext: Boolean;
    begin
      Inc(fIndex);
      Result := not(fIndex > fMaxIndex);
    end;

    function TObjectListEnumerator<T>.GetCurrent: T;
    begin
      Result := T(fList[fIndex]);  // <-- E2089: Invalid typecast 
    end;
4

1 回答 1

1

正如文档所述: 的属性Items具有Contnrs.TObjectList类型TObject

property Items[Index: Integer]: TObject read GetItem write SetItem; default;

另一方面,类型参数T不受约束,可以是任何类型,例如像Integer.

如果添加泛型类型约束,则代码应编译:

TObjectListEnumerator<T: TObject> = class
于 2016-02-05T20:40:35.797 回答