我想使用TValue将字符串转换为枚举类型,但是我没有找到如何做到这一点。使用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;
是的,我知道。但我可以发誓,我已经看到有人使用TValue来做这件事。不管怎样,谢谢你。 – 2010-03-18 23:23:02