以下示例在delphi中是不允许的,但有没有实现类似功能的用法
  
     Val1 := 'abc' ;
     Val2 := Ary[Val1] ;
   //则 Val2 = 'abc' ;

解决方案 »

  1.   

    Ary[Val1]   <-- 不是太明白这个写法的含义。
      

  2.   

    不好意思,一时心慌,出错了,应该是这样:
     var 
      ary:array ['abc'..'def'] of string ;
      ary['abc'] := '12345' ;
      ary['def'] :='23456' ;
      Val1 := 'abc' ;
      Val2 := Ary[Val1] ; //则 Val2 = '12345' ;
      我知道有Delphi这样的数组下标是非法的,但有没有实现类似于这样的变量引用的方法呢?
      

  3.   

    用TStringList吧!procedure TForm1.Button1Click(Sender: TObject);
    var
      S: TStrings;
      Val1: String;
    begin
      S := TStringList.Create;
      try
        S.Values['abc'] := '12345';
        S.Values['def'] := '23456';
        Val1 := 'abc';
        ShowMessage(S.Values[Val1]);
      finally
        S.Free;
      end;end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
        TAlphaBeta   =   (abc, bcd, cde, def);
    var
        ary: array[0..3] of string;
        var1: TAlphaBeta;
    begin
        ary[integer(abc)] := '1234';
        ary[integer(bcd)] := '2345';    var1 := abc;
        Showmessage(ary[integer(abc)]);
    end;
      

  5.   

    可以用TStrings来实现类似的功能:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        AIndex, AValue : TStrings;
        procedure AddValue(sIndex, sValue: String);
        function  GetValue(sIndex: String): String;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      AIndex := TStringList.Create;
      AValue := TStringList.Create;
      AddValue('abc', '12345');
      AddValue('def', '67890');
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FreeAndNil(AIndex);
      FreeAndNil(AValue);
    end;procedure TForm1.AddValue(sIndex, sValue: String);
    var
      iIndex : Integer;
    begin
      iIndex := AIndex.IndexOf(sIndex);
      if iIndex >=0 then
        AValue.Strings[iIndex] := sValue
      else begin
        AIndex.Add(sIndex);
        AValue.Add(sValue);
      end;
    end;function TForm1.GetValue(sIndex: String): String;
    var
      iIndex : Integer;
    begin
      iIndex := AIndex.IndexOf(sIndex);
      if iIndex >=0 then
        Result := AValue.Strings[iIndex]
      else
        Result := '';
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      Val1, Val2: String;
    begin
      Val1 := 'abc';
      Val2 := GetValue(Val1);
      ShowMessage (Val2);
    end;end.