تحويل enum إلى String وبالعكس 💡

1 Minutes Apr 25, 2023 134 Words

احفظ هذا الكود في ملف Conversions.pas (يجب ان لا تغير اسم الملف) واضفه لتطبيقك


unit Conversions;

interface

uses
  System.SysUtils, System.TypInfo;

type
  TConversions<T> = record
    class function StringToEnumeration(x: String): T; static;
    class function EnumerationToString(x: T): String; static;
  end;


implementation

class function TConversions<T>.StringToEnumeration(x: String): T;
begin
  case Sizeof(T) of
    1: PByte(@Result)^ := GetEnumValue(TypeInfo(T), x);
    2: PWord(@Result)^ := GetEnumValue(TypeInfo(T), x);
    4: PCardinal(@Result)^ := GetEnumValue(TypeInfo(T), x);
  end;
end;

class function TConversions<T>.EnumerationToString(x: T): String;
begin
  case Sizeof(T) of
    1: Result := GetEnumName(TypeInfo(T), PByte(@x)^);
    2: Result := GetEnumName(TypeInfo(T), PWord(@x)^);
    4: Result := GetEnumName(TypeInfo(T), PCardinal(@x)^);
  end;
end;

end.

طريقة الاستخدام:

( لا حاجة لإنشاء اوبجكت من نوع TConversions )

...
var
    myEnum: (meCustomer, meSupplyer, meTeacher, meEmployee)
    ...

// From string to enum
var
    myValue: myEnum;
...
myValue := TConversions<myEnum>.StringToEnumeration('meTeacher');


// from enum to string
var 
    myStr: String;
...
myStr := TConversions<myEnum>.EnumerationToString(meCustomer);