Dann schau dir mal
TRttiEnumerationType
an.
GetMinValue
und
GetMaxValue
sind zwar leider
private
, aber folgende Methoden könnten dir evtl. schon reichen:
Delphi-Quellcode:
function GetNames: TArray<string>;
class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
class function GetValue<T{: enum}>(const AName: string): T; static;
Ansonsten hätte ich hier noch eine Möglichkeit explizit an Min und Max zu gelangen (Auszug aus einem Code, der den generischen Enum Typ in einen Ordinalwert konvertiert und dabei zur Sicherheit einige Assertions aufgrund der
RTTI Infos ausführt):
Delphi-Quellcode:
var
TypeInfo: PTypeInfo;
TypeData: PTypeData;
V: Integer;
begin
Assert(SizeOf(V) >= SizeOf(T));
TypeInfo := System.TypeInfo(T);
Assert(Assigned(TypeInfo) and (TypeInfo^.Kind = tkEnumeration));
TypeData := System.TypInfo.GetTypeData(TypeInfo);
V := 0;
Move(Value, V, SizeOf(T));
Assert((V >= TypeData^.MinValue) and (V <= TypeData^.MaxValue));