Einzelnen Beitrag anzeigen

Benutzerbild von smallie
smallie

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

AW: Set of Enumeration Type in Datenbank-Parameter zuweisen

  Alt 12. Jun 2014, 23:35
Das mit der Helper-Klasse hätte ich wohl schon gemacht, wenn im rechten Teil des Helpers auch ein generischer Typ angegeben werden könnte Ich habe bisher drei unterschiedliche Typen von "FLAGS", je nachdem in welchem Objekt. Und jedem Set sein eigenes Helper-Objekt an die Seite zu stellen mit dreimal dem gleichen Quellcode bis auf den Typ
Ich mach' das so:

Delphi-Quellcode:
uses
  TypInfo;

type
  TEnumHelper = class
  private
    FEnumInfo: PTypeInfo;
  public
    Constructor Create(AEnumInfo: PTypeInfo);
    function ToString(const EnumValue): string; //typloser Parameter
    function ToEnum(const Name: string): integer;
  end;


implementation

constructor TEnumHelper.Create(AEnumInfo: PTypeInfo);
begin
  FEnumInfo := AEnumInfo;
end;

function TEnumHelper.ToString(const EnumValue): string;
begin
  Result := GetEnumName(FEnumInfo, ord(TOrdType(EnumValue))); //typloser Parameter wird gecastet
end;


function TEnumHelper.ToEnum(const Name: string): integer;
begin
  Result := GetEnumValue(FEnumInfo, Name);
end;
So läßt sich damit arbeiten:

Delphi-Quellcode:
//Enumeration:
TTasteBuds = (tbSour, tbSweet, tbSalty, tbSpicey, tbUmami)

//Erzeugung und Verwendung
TasteBuds := TEnumHelper.Create(TypeInfo(TTasteBuds));
showMessage(TasteBuds.ToString(tbSour)); //"tbSour"

//oder andere Richtung
var SomeTasteBud: TTasteBuds;

SomeTasteBud := TTasteBuds(TasteBuds.ToEnum(tbSour)); //hier muß zurückgecastet werden. :(
Auf eine Lösung, wie ich diesen letzten Cast einsparen kann, bin ich noch nicht gekommen. Wenn nur eine Zahl herauskommen soll, passt es.
"There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors."
  Mit Zitat antworten Zitat