如何對列舉和字串互相轉換

有關Delphi 的語法, 程式, 等
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

如何對列舉和字串互相轉換

文章 tim »

此作業的最佳解法為利用 RTTI 的方式來進行. 配合 TypInfo 中的 GetEnumvalue 及 GetEnumName 來進行轉換的作業.

列舉為一有序的數列, 第一個列舉數為 0, 可以利用 Ord 來轉型取得其順序, 例如:

type
TOrdinalType = (otFirst, otSecond, otThird);

其中 Ord(otFirst) = 0, Ord(otSecond) = 1 .....

接下來就可以利用下面的兩個函式進行互轉的動作.

代碼: 選擇全部

     
     
    function StrToTOrdinalType(FStr: String): TOrdinalType; 
    var 
      i : integer; 
    begin 
      i := GetEnumvalue( TypeInfo(TOrdinalType)  , FStr ); 
      Result := TOrdinalType(i); 
    end; 
     
    function TOrdinalTypeToStr(FOrdinalType: TOrdinalType): String; 
    begin 
      Result := GetEnumName( TypeInfo(TOrdinalType)  , Ord(FOrdinalType)); 
    end; 
     
    //測試段: 
    procedure Tform1.Button3Click(Sender: TObject); 
    begin 
      showmessage(TOrdinalTypeToStr(otFirst));  //檢驗是否可以由 otFirst 轉為 'otFirst' 
      if StrToTOrdinalType('otFirst') = otFirst then Showmessage('Right'); //檢驗是否可以由 'otFirst' 轉為 otFirst 
    end; 
多多留言, 整理文章, 把經驗累積下來.....
回覆文章