我有一个布尔字段,我想使用MyField.SetValue(Self, MyValue)设置它。不管我做了什么,我都会不断地犯错误。
问题是,MyValue总是包含序数,不被识别为包含布尔值。我知道布尔值是一个枚举,它是序数,但是仍然可以使用TValue设置布尔字段和属性。
我尝试了下面的方法来启动MyValue,但是每次都是MyValue.IsOrdinal = True而不是MyValue.IsBoolean = False
MyValue := TValue.From(True);MyValue := TValue.From<Boolean>(True);MyBool := True; MyValue := MyValue.From(MyBool);MyBool := True; MyValue := MyValue.From<Boolean>(MyBool);MyValue := True;MyBool := True; MyValue := MyBool;MyBool := True; TValue.Make(@MyBool, TypeInfo(Boolean), MyValue);有没有办法让TValue接受它包含一个布尔i.s.o。这样MyField.SetValue(Self, MyValue)才能成功?
提前谢谢你,
德洛曼
发布于 2012-05-08 16:02:03
TValue可以很好地处理布尔值。
检查此示例代码
{$APPTYPE CONSOLE}
uses
Rtti,
SysUtils;
Type
TAnyClass=class
AField : Boolean;
end;
Var
Ctx : TRttiContext;
MyValue : TValue;
A : TAnyClass;
MyField : TRttiField;
begin
try
Ctx:=TRttiContext.Create;
A:=TAnyClass.Create;
try
MyField:=Ctx.GetType(TAnyClass).GetField('AField');
MyValue:= MyValue.From(False);
MyField.SetValue(A, MyValue);
Writeln('The Value of AField Is '+BoolToStr(A.AField, True));
MyValue:= MyValue.From(True);
MyField.SetValue(A, MyValue);
Writeln('The Value of AField Is '+BoolToStr(A.AField, True));
finally
A.Free;
Ctx.Free;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.https://stackoverflow.com/questions/10497372
复制相似问题