TValue.AsType<T> с типами перечислений в Delphi
Написание этого в Delphi
uses System.Classes;
...
var
A: TAlignment;
Value: TValue;
begin
Value := 0;
A := Value.AsType<TAlignment>();
end;
поднимает EInvalidCast на AsType.
Есть ли способ привести к любому типу перечисления из целочисленного значения с TValue?
Это, конечно, очевидный ответ:
A := TAlignment(Value);
но я хочу предоставить универсальную функцию, которая работает и с другими типами.
1 ответ
Это, кажется, делает это:
if (PTypeInfo(TypeInfo(TAlignment))^.Kind = tkEnumeration) and (Value.TypeInfo.Kind = tkInteger ) then
case System.TypInfo.GetTypeData(TypeInfo(TAlignment))^.OrdType of
otUByte, otSByte: PByte(@A)^ := Value.AsInteger;
otUWord, otSWord: PWord(@A)^ := Value.AsInteger;
otULong, otSLong: PInteger(@A)^ := Value.AsInteger;
end
else
A := Value.AsType<TAlignment>();
где TAlignment также может быть T в обобщенной функции.
(Скопировал идею из TRttiEnumerationType.GetValue)