Registriert seit: 8. Jan 2013
19 Beiträge
Delphi 10.3 Rio
|
AW: Automatischer Setter/Getter für Aufzählungs-Variablen via RTTI?
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."
|
|
Zitat
|