我想使用 TValue 将字符串转换为枚举类型,我用谷歌搜索但我没有找到如何做到这一点。
type
TEnumTest = (etFirst, etSecond);
var
D: TEnumTest;
begin
D := StrToENumTest('etFirst');
end;
function StrToEnumTest(pStr:String):TEnumTest;
var
V: TValue;
begin
V := TValue.From<String>(pstr);
Result := V.AsType<TEnumTest>;
end;
它不起作用。那一定是我没有看到的愚蠢的东西——但我没有找到它。我做错了什么?
我知道如何使用 GetEnumValue。
编辑:@Warren,它放在这里,因为这更容易发布代码:
TEnumUtils = class
class function GetAs<T>(pValor: String): T;
end;
class function TEnumUtils.GetAs<T>(pValor: String): T;
var
Tipo: PTypeInfo;
Temp: Integer;
PTemp: Pointer;
begin
Tipo := TypeInfo(T);
Temp := GetEnumValue(Tipo, pValor);
PTemp := @Temp;
Result := T(PTemp^);
end;
用法:
type
TEnumTest = (etFirst, etSecond);
var
D: TEnumTest;
begin
D := TEnumUtils.GetAs<TEnumTest>('etFirst');
end;