Einzelnen Beitrag anzeigen

Benutzerbild von smallie
smallie

Registriert seit: 8. Jan 2013
19 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Automatischer Setter/Getter für Aufzählungs-Variablen via RTTI?

  Alt 17. Okt 2017, 18:59
Was mich an dieser (und erst recht an meiner) Lösung trotzdem noch stört, ist, dass ich quasi die gleichen Texte zweimal (bei mir: drei mal) im Code aufführen und ergänzen muss (Hund und 'Hund')...
So vielleicht:


Delphi-Quellcode:
type

  TDataType = (dtString, dtInteger, dtFloat, dtCurrency, dtDate, dtBoolean);

  //erlaubt die Umwandlung von Aufzählungen in Strings und zurück
  TEnumHelper = class
  private
    FEnumInfo: PTypeInfo;
    FPrefix: string;
  public
    Constructor Create(AEnumTypeInfo: PTypeInfo; Prefix: string);
    function ToString(const EnumValue): string;
    function ToEnum(Name: string): integer;
  end;


implementation

////////////////////////////////////////////////////////////////////////////////
//
// TEnumHelper
//
////////////////////////////////////////////////////////////////////////////////

constructor TEnumHelper.Create(AEnumTypeInfo: PTypeInfo; Prefix: string);
begin
  FEnumInfo := AEnumTypeInfo;
  FPrefix := Prefix;
end;

function TEnumHelper.ToEnum(Name: string): integer;
begin
  Name := FPrefix + Name;
  Result := GetEnumValue(FEnumInfo, Name);
end;

function TEnumHelper.ToString(const EnumValue): string;
begin
  Result := GetEnumName(FEnumInfo, ord(TOrdType(EnumValue)));
  System.Delete(Result, 1, Length(FPrefix));
end;
Delphi-Quellcode:
//Erzeugen mit Angabe des Prefixes. Wird entfernt oder hinzugenommen.
var
  DataTypes : TEnumHelper;
begin
  DataTypes := TEnumHelper.Create(TypeInfo(TDataType) , 'dt');
end;


//Verwendung
var
  DataTypeName: string;
  DataType: TDataType;
begin
  DataType := TDataType(DataTypes.ToEnum(DataTypeName);
  DataTypeName := DataTypes.ToString(DataTypEnum);
end;
"There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors."
  Mit Zitat antworten Zitat