Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Enum zu String: eine Funktion für mehrere Enums? (https://www.delphipraxis.net/192005-enum-zu-string-eine-funktion-fuer-mehrere-enums.html)

a.def 13. Mär 2017 10:20

Enum zu String: eine Funktion für mehrere Enums?
 
Ich arbeite mittlerweile sehr viel mit Enums. Die sind einfach wesentlich komfortabler als Arrays. Man kann z.B. auf MeinEnum.MeinWert zugreifen als auf MeinArray[0]. Ließt sich wesentlich einfacher und außerdem bin ich an keine feste Reihenfolge der Enum-Werte gebunden.

Mit folgender Funktion wandle ich einen Enum in einen String um:

Delphi-Quellcode:
class function TEnumFunctions.EnumGetNameString(const aEnumVal: TIniProgramSettings_Sections): string;
var
 bVal: Byte;
begin
 Move(aEnumVal, bVal, SizeOf(TIniProgramSettings_Sections));
 Result := GetEnumName(TypeInfo(TIniProgramSettings_Sections), bVal);
end;
Davon habe ich mittlerweile acht Funktionen.
Ist es irgendwie möglich nur eine einzige Funktion für alle Enums zu haben statt für jeden Enum-Typen eine?

Stevie 13. Mär 2017 10:24

AW: Enum zu String: eine Funktion für mehrere Enums?
 
System.Rtti.TRttiEnumerationType.GetName

Delphi-Laie 13. Mär 2017 10:24

AW: Enum zu String: eine Funktion für mehrere Enums?
 
Zitat:

Zitat von a.def (Beitrag 1364001)
Man kann z.B. auf MeinEnum.MeinWert zugreifen als auf MeinArray[0].

?

Fehlt doch irgendein Wort.

Zitat:

Zitat von a.def (Beitrag 1364001)
Ist es irgendwie möglich nur eine einzige Funktion für alle Enums zu haben statt für jeden Enum-Typen eine?

Überladen, also "overload" verwenden?

a.def 13. Mär 2017 10:44

AW: Enum zu String: eine Funktion für mehrere Enums?
 
Zitat:

Ist es irgendwie möglich nur eine einzige Funktion für alle Enums zu haben statt für jeden Enum-Typen eine?
Du hast mich nicht verstanden :P
Ich habe schon 8 dieser Funktionen, selbstverständlich mit Overload. Aber mein Ziel ist es nur eine einzige Funktion zu haben der ich jegliche Enums übergeben kann.

Zitat:

System.Rtti.TRttiEnumerationType.GetName
Genau was ich gesucht habe!

Delphi-Quellcode:
// uses Generics.Collections, System.Rtti

class function TEnumFunctions.Test<T {: enum} >(AValue: T): string;
begin
 Result := System.Rtti.TRttiEnumerationType.GetName(AValue);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz