![]() |
String in Enum umwandeln - Problem mit meiner Funktion
Ich möchte gerne anhand eines Strings das passende Enum als Funktions-Resultat zurückbekommen.
Dazu habe ich diese Funktion hier
Delphi-Quellcode:
Aufruf
class function TEnumFunctions.GetValue<T>(AValue: string): T;
var Tipo: PTypeInfo; Temp: Integer; PTemp: pointer; begin Tipo := TypeInfo(T); Temp := GetEnumValue(Tipo, AValue); PTemp := @Temp; Result := T(PTemp^); end;
Delphi-Quellcode:
Als Fehlermeldung erhalte ich
var
xyz: TMeinEnum; begin xyz := TEnumFunctions.GetValue('meTest'); Zitat:
Ging wohl in die Hose |
AW: String in Enum umwandeln - Problem mit meiner Funktion
Ich kenn mich ja mit Generics nicht aus, aber du musst dem Compiler doch verraten, welchen Typ du erwartest. Sowas wie:
Delphi-Quellcode:
xyz := TEnumFunctions.GetValue<TMeinEnum>('meTest');
|
AW: String in Enum umwandeln - Problem mit meiner Funktion
Zitat:
Delphi-Quellcode:
TRttiEnumerationType.GetValue<T>(<Name>)
|
AW: String in Enum umwandeln - Problem mit meiner Funktion
Mh ich glaube ich stelle mich zu doof an.
Delphi-Quellcode:
Umgekehrt klappt es wunderbar
class function TEnumFunctions.GetValueX<T>(AValue: string): T;
begin Result := System.Rtti.TRttiEnumerationType.GetValue<T>(AValue); end;
Delphi-Quellcode:
class function TEnumFunctions.GetName<T>(AValue: T): string;
begin Result := System.Rtti.TRttiEnumerationType.GetName(AValue); end; |
AW: String in Enum umwandeln - Problem mit meiner Funktion
Zitat:
|
AW: String in Enum umwandeln - Problem mit meiner Funktion
Hab mich extrem doof angestellt und was vergessen deswegen klappte es nicht.
Delphi-Quellcode:
Nur eine Frage habe ich noch.
xyz := TEnumFunctions.GetValueX<TIntervalModes>('meTest'); // <TIntervalModes> vergessen!
Wenn "meTest" nicht zugeordnet werden kann, wird standardmäßig 255 zurückgegeben. Wie kann ich das prüfen und ggf. 0 zurückgeben? Bei diesem "Fertig-Code" mit ein paar Zeilen mehr (siehe erster Beitrag) ist Temp in dem Fall -1 und das kann man prüfen. |
AW: String in Enum umwandeln - Problem mit meiner Funktion
Zitat:
Delphi-Quellcode:
Intern wird auch hier -1 zurückgegeben. Durch den Cast auf Byte (vermutlich passt der Enum da rein) wird daraus halt 255.
type
TMyEnum = (one, two, three); var temp: TMyEnum; begin temp := TEnumFunctions.GetValueX<TMyEnum>('Hallo?'); Writeln(Ord(temp)); end; |
AW: String in Enum umwandeln - Problem mit meiner Funktion
Zitat:
Delphi-Quellcode:
Das geht mit TRttiEnumerationType.GetValue<T> natürlich nicht (also innerhalb der Funktion GetValueX), weil man dort den Enum-Typ nicht kennt.
class function TEnumFunctions.GetValue<T>(AValue: string): T;
var Tipo: PTypeInfo; Temp: Integer; PTemp: pointer; begin Tipo := TypeInfo(T); Temp := GetEnumValue(Tipo, AValue); if Temp < 0 then Temp := 0; PTemp := @Temp; Result := T(PTemp^); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz