19

Delphi 2010 で RTTI システムを使用して、プロパティが TDateTime かどうかを調べる方法はありますか? 現在、asVariant をコールバックするたびに、またプロパティ タイプをチェックすると、それは double として扱われます。これは基本型しか見えないからでしょうか?(TDateTime = double)

4

2 に答える 2

26

Nameのプロパティを確認してみてくださいTRttiProperty.PropertyType

私は Delphi 2010 を持っていませんが、これは XE で動作します。

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  Rtti;

type
  TMyClass =class
  private
    FDate: TDateTime;
    FProp: Integer;
    FDate2: TDateTime;
    FDate1: TDateTime;
  public
   property Date1 : TDateTime read FDate1  Write FDate1;
   property Prop : Integer read FProp  Write FProp;
   property Date2 : TDateTime read FDate2  Write FDate2;
  end;

var
 ctx : TRttiContext;
 t :  TRttiType;
 p :  TRttiProperty;
begin
 ctx := TRttiContext.Create;
 try
   t := ctx.GetType(TMyClass.ClassInfo);
   for p in  t.GetProperties do
    if CompareText('TDateTime',p.PropertyType.Name)=0 then
     Writeln(Format('the property %s is %s',[p.Name,p.PropertyType.Name]));
 finally
   ctx.Free;
 end;
  Readln;
end.

このコードは戻ります

the property Date1 is TDateTime
the property Date2 is TDateTime
于 2011-10-20T13:58:50.673 に答える
3

タイプを定義する際の重要なポイントは、タイプディレクティブです。これら 2 つの定義は異なります。

Type
  TDateTime = Double; // here p.PropertyType.Name returns Double

but

Type
  TDateTime = type Double; // here p.PropertyType.Name returns TDateTime

or 

Type
  u8 = type Byte; // here p.PropertyType.Name returns u8

but

Type
  u8 = Byte; // here p.PropertyType.Name returns Byte !
于 2012-03-25T20:48:43.213 に答える