Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: System.Enum.IsDefined in nicht-net-Projekten?

  Alt 30. Dez 2019, 18:05
Meine Enums haben keine Lücken, da ich diese Zuweisung 1, 2, 3 nicht benutze.

Delphi-Quellcode:
function TEnumUtils.isDefined<T>(MyValue: T): Boolean;
begin
 Result := not((Ord(MyValue) < 0) or (Ord(MyValue) > Ord(High(T))));
end;
scheint ohnehin nicht zu funktionieren leider. Enums sind so ein Thema bei mir.
Deinen Link gucke ich mir gleich mal an.



Was genau macht eigentlich dieses Guard.CheckEnum?
Delphi-Quellcode:
class procedure Guard.CheckEnum<T>(const argumentValue: T;
  const argumentName: string);
var
  intValue: Integer;
begin
  intValue := 0;
  Move(argumentValue, intValue, SizeOf(T));
  Guard.CheckEnum<T>(intValue, argumentName);
end;


===

Hier ist mein Ergebnis
Delphi-Quellcode:
class function TEnumUtils.IsDefined<T>(const Value: Integer): Boolean;
var
 data: PTypeData;
begin
 data := GetTypeData(TypeInfo(T));
 Result := (Value >= data.MinValue) and (Value <= data.MaxValue);
end;

class function TEnumUtils.IsDefined<T>(const Value: T): Boolean;
var
 i: Integer;
begin
 i := TEnumUtils.ToInteger<T>(Value);
 Result := TEnumUtils.IsDefined<T>(i);
end;

class function TEnumUtils.IsDefined<T>(const Value: string): Boolean;
begin
 Result := TEnumUtils.IsDefined<T>(TEnumUtils.GetValue<T>(Value, -1));
end;
Ich habe mir noch ein IsDefined mit String-Parameter deklariert, weil ich das zusammen mit meiner Ini-Klasse benötige.

Geändert von DieDolly (30. Dez 2019 um 19:38 Uhr)
  Mit Zitat antworten Zitat