Передача ссылки на TObjectDictionary <TKey, TValue> .TValueEnumerator - PullRequest
3 голосов
/ 25 июня 2010

Я пытаюсь использовать универсальный TObjectDictionary от Delphi 2010.

Я хотел бы передать перечислитель свойства Values этого универсального класса, и компилятор, похоже, не хочет, чтобы я это разрешил... Пример:

  TAttributeStates = class(TInterfacedObject, IAttributeStates)
  private
    FStates: TObjectDictionary<TPatchAttribute, TAttributeState>;

  public

    constructor Create;
    destructor Destroy; override;

    function GetEnumerator: TObjectDictionary<TPatchAttribute, TAttributeState>.TValueEnumerator;

  end;

  implementation

    function TAttributeStates.GetEnumerator: TObjectDictionary<TPatchAttribute, TAttributeState>.TValueEnumerator;
    begin
      result := FStates.Values.GetEnumerator;
    end;

Не удается скомпилировать с ошибкой:

[DCC Error] ChannelStates.pas(249): E2010 Incompatible types: 'TDictionary<Generics.Collections.TObjectDictionary<TKey,TValue>.TKey,Generics.Collections.TObjectDictionary<TKey,TValue>.TValue>.TValueEnumerator' and 'TDictionary<ChannelPatch.TPatchAttribute,ChannelStates.TAttributeState>.TValueEnumerator'

Похоже, что компилятор неправильно разрешает подтип ...

У кого-нибудь есть идеи?

N @

1 Ответ

2 голосов
/ 25 июня 2010

Нашел.

function GetEnumerator: TEnumerator<TAttributeState>;


function TAttributeStates.GetEnumerator: TEnumerator<TAttributeState>;
begin
  result := FStates.Values.GetEnumerator;
end;

Работает нормально.

...