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