4

名前でインデックス付けされた一連のオブジェクトを格納する TDictionary があり、すべてのオブジェクトを調べられるようにしたいと考えています。だから私はこれを試しました:

var enumerator: TMyObject;
begin
   for enumerator in myDictionary do

しかし、それはコンパイルされません。「互換性のない型: 'TMyObject' および 'TPair'

だから私はそれを少し違った方法で試しました:

var enumerator: TPair<string, TMyObject>;

それもコンパイルされませんでした。このエラー メッセージはさらに奇妙です: Incompatible types: 'TPair' and 'TPair'

どうやら、for .. inループで辞書を列挙するには、ある種のファンキーな文法が必要なようです。正しく宣言する方法を知っている人はいますか?

編集: Fabio Gomes は適切に動作する例を示しましたが、私のコードはまだ彼の方法を使用してコンパイルされません。別の部署で働いているからでしょうか?Value 側で使用するディクショナリとクラスは両方とも 1 つのユニットで定義され、このコードは別の場所にあります。それはコンパイラのバグになりますか?誰でもこれを確認できますか?

編集 2: 問題が見つかりました。 http://qc.embarcadero.com/wc/qcmain.aspx?d=69461興味のある方はどうぞ。

4

1 に答える 1

7

これは期待どおりに機能します。

var
  Enum: TPair<string, TForm>;
  MyDict: TDictionary<string, TForm>;
begin
  MyDict := TDictionary<string, TForm>.Create;
  try
    MyDict.Add('Form1', Self);
    for Enum in MyDict do
      ShowMessage(Enum.Key);
  finally
    MyDict.Free;
  end;

このコードを任意のフォームの FormCreate イベントに貼り付けて、自分の目で確かめてください。

于 2008-11-28T19:53:27.417 に答える