Ich arbeite schon lange mit record helpern für alle möglichen Typen. Auch für Enum benutze ich record helper und die funktionieren sehr gut.
Ich stoße bei Enum allerdings auf ein Problem mit impliziter Zuweisung.
Hier ein Codebeispiel, der mir sogar von der "
RAD AI Companion" vorgeschlagen wurde.
Delphi-Quellcode:
type
TColor = (rot, grün, blau);
TColorHelper =
record helper
for TColor
class operator Implicit(a: TColor):
string;
class operator Implicit(a:
string): TColor;
end;
class operator TColorHelper.Implicit(a: TColor):
string;
begin
case a
of
rot: Result := '
rot';
grün: Result := '
grün';
blau: Result := '
blau';
else
Result := '
unbekannt';
end;
end;
class operator TColorHelper.Implicit(a:
string): TColor;
begin
if a = '
rot'
then
Result := rot
else if a = '
grün'
then
Result := grün
else if a = '
blau'
then
Result := blau
else
raise Exception.Create('
Ungültiger Farbname');
end;
var
lFarbe:
string;
color: TColor;
begin
color := rot;
lFarbe := color;
// implizite Konvertierung von TColor zu string -> [dcc32 Fehler] Test.dpr(49): E2010 Inkompatible Typen: 'TColor' und 'string'
WriteLn(lFarbe);
// Ausgabe: rot
lFarbe := '
grün';
color := lFarbe;
// implizite Konvertierung von string zu TColor -> [dcc32 Fehler] Test.dpr(53): E2010 Inkompatible Typen: 'string' und 'TColor'
WriteLn(Ord(color));
// Ausgabe: 1 (Ordinalwert von grün)
end.
Habe ich irgendetwas übersehen? Compilerschalter? Fehlender Uses-Eintrag?