2013-10-29 14 views
5

DelphiプロジェクトでTDictionaryを使用します。しかし、私は問題を抱えています。どうすればデフォルト値でTDictionaryという定数配列を作成できますか?既定値でTDictionaryの定数配列を作成します。

たとえば、私は、このような(TItemの定数配列のための)怒鳴るコードとして辞書のための4項目を割り当てたい:

... 
type 
    TItem = record 
    _Key: string; 
    _Value: string; 
    end; 
var 
    Dic: array [0..3]of TItem=(
    (_Key:'A' ; _Value:'Apple'), 
    (_Key:'B' ; _Value:'Book'), 
    (_Key:'C' ; _Value:'C++'), 
    (_Key:'D' ; _Value:'Delphi') 
); 
... 

TDictionaryでこの仕事をする方法はありますか? 私はDic(ただし)の定数配列を作成したいと思っています。

... 
    var 
     Dic: TDictionary<string, string>; 
    begin 
     Dic := TDictionary<string, string>.Create; 
     try 
     Dic.Add('A', 'Apple'); 
     Dic.Add('B', 'Book'); 
     Dic.Add('C', 'C++'); 
     Dic.Add('D', 'Delphi'); 
     finally 
     /// 
     end; 
    ... 

誰でも私のアドバイスはありますか? (私の英語が貧弱な場合は、私におかけください)

答えて

8

クラスのインスタンスである定数式を記述することはできません。

TDictionaryは、定数を作成できるタイプのStringのコレクションであるため、定数から実行時にTDictionaryを作成することができます。あなたの質問のようにレコードを使用することができますが、私は配列を好む:

{$IFDEF WHATEVER} 
type 
    TDictConstant = array[0..3, 0..1] of String; 
const 
    DICT_CONSTANT: TDictConstant = (('A', 'Apple'), ('B', 'Book'), ('C', 'C++'), ('D', 'Delphi')); 
{$ELSE} 
// If you want it "blank" for one config 
type 
    TDictConstant = array[0..0, 0..1] of String; 
const 
    DICT_CONSTANT: TDictConstant = (('', '')); 
{$ENDIF} 
var 
    Dic: TDictionary<string, string>; 

procedure TForm1.FormCreate(Sender: TObject); 
var 
    i: Integer; 
begin 
    Dic := TDictionary<string, string>.Create; 
    for i := 0 to High(DICT_CONSTANT) do 
    begin 
    // Ignore the "blank" ones 
    if (DICT_CONSTANT[i][0] <> '') or (DICT_CONSTANT[i][1] <> '') then 
    begin 
     Dic.Add(DICT_CONSTANT[i][0], DICT_CONSTANT[i][1]); 
    end; 
    end; 
end; 

私は過去に同様のやりました。

+0

これが受け入れられる回答である場合は、質問された質問に答える必要があります。ちょっとした編集でその権利を置くことができます。 –

+1

また、これが質問のコードよりも優れていることを説明できますか?それは、目に見えない利益のように見えるもののための追加の言葉遣いを追加します。このコードではなく、このコードを使用しますか? –

+0

@DavidHeffernan、コメントありがとう。あなたの回答を更新しました。既に説明をしてくれているので、私は解決策を提供していました。あなたの答えはもともと選ばれていましたが、OPは私のものに切り替えました。 –

5

クラスのインスタンスである定数式を記述することはできません。あなたがしようとしていることは不可能です。

関連する問題