Delphi 2010でRTTIシステムを使用すると、プロパティがTDateTimeであるかどうかを調べる方法はありますか?現在、私はasVariantをコールバックするたびに、またプロパティの型をチェックすると、doubleとして扱います。これはベースタイプしか見ることができないためですか? (されたTDateTime =ダブル)RTateを使用してTDateTimeプロパティとDoubleプロパティを区別するにはどうすればよいですか?
17
A
答えて
22
は、私は、Delphi 2010はありませんが、これはXEで動作TRttiProperty.PropertyType
のName
プロパティをチェックしてみます。タイプを定義しながら、
{$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
3
キーポイントを返すことはタイプディレクティブです。これら二つの定義が異なっている:
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 !
+0
明らかに、OPは問題のタイプを宣言していないので、技術的にはこれは答えではありませんが、あなたは正しいと思います。 +1 – NGLN
関連する問題
- 1. C#でプロパティを使用するにはどうすればよいですか?
- 2. コアデータInteger64プロパティを使用するにはどうすればよいですか?
- 3. EntityCollectionプロパティを別のプロパティに割り当てるにはどうすればよいですか?
- 4. TDateTimeをFILETIMEに変換するにはどうすればよいですか?
- 5. UIButtonプロパティを別のプロパティにバインドするにはどうすればよいですか?
- 6. Datamapperを使用して、あるテーブルの行を別のテーブルのプロパティとして使用するにはどうすればよいですか?
- 7. Visibleプロパティを使用してUWPでアニメーションを再起動するにはどうすればよいですか?
- 8. Interface Builderを使用してUIBarButtonItemsをUIViewController.toolbarItemsプロパティに追加するにはどうすればよいですか?
- 9. ピンチズームとクリックを区別するにはどうすればよいですか?
- 10. コントロールのプロパティを別のコントロールのプロパティにバインドするにはどうすればいいですか?
- 11. Visual C#、コントロールを使用してSetItemCheckedプロパティを設定するにはどうすればよいですか?
- 12. Ninjectを使用して静的プロパティを挿入するにはどうすればよいですか?
- 13. IXmlSerializationを使用して、Tプロパティをシリアル化するにはどうすればよいですか?
- 14. ICommandを使用してモデルのプロパティを変更するにはどうすればよいですか?
- 15. CSSを使用してデータリストのRepeatColumnsプロパティを設定するにはどうすればよいですか?
- 16. UIStepperを使用してレルムモデルオブジェクトのプロパティを変更するにはどうすればよいですか?
- 17. Spring SPELを使用して動的プロパティ名を解決するにはどうすればよいですか?
- 18. OrientDB:SQLを使用して一意のプロパティを作成するにはどうすればよいですか?
- 19. キャンバスCSSプロパティを使用してFabric JSをエクスポートするにはどうすればよいですか?
- 20. EWS Java APIを使用してMAPIプロパティにアクセスするにはどうすればよいですか?
- 21. COM Interopを使用して複合オブジェクトのプロパティにアクセスするにはどうすればよいですか?
- 22. プロパティを使用してマルチインスタンスMQSeriesキューマネージャに接続するにはどうすればよいですか?
- 23. ng-repeatの値をng-repeatプロパティとして使用するにはどうすればいいですか?
- 24. @CachePutのキーとしてオブジェクトのプロパティを使用するにはどうすればいいですか?
- 25. slice()を使用して.length()プロパティを書き換えるにはどうすればよいですか?
- 26. PreviousPageプロパティを使用してリストを渡すにはどうすればよいですか?
- 27. CodableのすべてのプロパティにdecodeIfPresentを使用するにはどうすればよいですか?
- 28. オブジェクトのプロパティをオブジェクトの配列のプロパティと照合するにはどうすればよいですか?
- 29. routerActiveと一緒にhtmlテンプレートのrelativeToプロパティを使用するにはどうすればよいですか?
- 30. AutoMouseScrollおよびMouse howerプロパティのプロパティをUltraDropdownに設定するにはどうすればよいですか?
まあ、日付/時刻が常に二重のある小数部分が – Marco
(当日の一部として)分と秒を表している整数部は、日を表して、私はそれがあることを理解します技術的には二倍ですが、RTTIを使用してTDateTimeとして定義されているかどうかを確認する方法はありますか? – Barry