首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi TValue.From(True)不产生TValue布尔值

Delphi TValue.From(True)不产生TValue布尔值
EN

Stack Overflow用户
提问于 2012-05-08 11:04:51
回答 1查看 1.5K关注 0票数 0

我有一个布尔字段,我想使用MyField.SetValue(Self, MyValue)设置它。不管我做了什么,我都会不断地犯错误。

问题是,MyValue总是包含序数,不被识别为包含布尔值。我知道布尔值是一个枚举,它是序数,但是仍然可以使用TValue设置布尔字段和属性。

我尝试了下面的方法来启动MyValue,但是每次都是MyValue.IsOrdinal = True而不是MyValue.IsBoolean = False

  1. MyValue := TValue.From(True);
  2. MyValue := TValue.From<Boolean>(True);
  3. MyBool := True; MyValue := MyValue.From(MyBool);
  4. MyBool := True; MyValue := MyValue.From<Boolean>(MyBool);
  5. MyValue := True;
  6. MyBool := True; MyValue := MyBool;
  7. MyBool := True; TValue.Make(@MyBool, TypeInfo(Boolean), MyValue);

有没有办法让TValue接受它包含一个布尔i.s.o。这样MyField.SetValue(Self, MyValue)才能成功?

提前谢谢你,

德洛曼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-08 16:02:03

TValue可以很好地处理布尔值。

检查此示例代码

代码语言:javascript
复制
{$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.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10497372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档