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. EntityCollectionプロパティを別のプロパティに割り当てるにはどうすればよいですか?
- 3. コアデータInteger64プロパティを使用するにはどうすればよいですか?
- 4. UIButtonプロパティを別のプロパティにバインドするにはどうすればよいですか?
- 5. Datamapperを使用して、あるテーブルの行を別のテーブルのプロパティとして使用するにはどうすればよいですか?
- 6. Interface Builderを使用してUIBarButtonItemsをUIViewController.toolbarItemsプロパティに追加するにはどうすればよいですか?
- 7. コントロールのプロパティを別のコントロールのプロパティにバインドするにはどうすればいいですか?
- 8. IXmlSerializationを使用して、Tプロパティをシリアル化するにはどうすればよいですか?
- 9. CSSを使用してデータリストのRepeatColumnsプロパティを設定するにはどうすればよいですか?
- 10. Ninjectを使用して静的プロパティを挿入するにはどうすればよいですか?
- 11. EWS Java APIを使用してMAPIプロパティにアクセスするにはどうすればよいですか?
- 12. PreviousPageプロパティを使用してリストを渡すにはどうすればよいですか?
- 13. AutoMouseScrollおよびMouse howerプロパティのプロパティをUltraDropdownに設定するにはどうすればよいですか?
- 14. ViewModelのプロパティとコレクションアイテムのプロパティにバインドするにはどうすればよいですか?
- 15. JavaScriptオブジェクトをPascalCaseプロパティからcamelCaseプロパティ(JavaScript)に複製するにはどうすればよいですか?
- 16. CamelプロパティをBeanにロードするにはどうすればよいですか?
- 17. プロパティを非公開にするにはどうすればよいですか?
- 18. Firefoxのタブを区別するにはどうすればよいですか?
- 19. .htaccessを使用してApacheの大文字と小文字を区別しないようにするにはどうすればよいですか?
- 20. EFを使用して区切り文字列のDBフィールドに配列プロパティをマップするにはどうすればよいですか?
- 21. SearchBoxExampleのプロパティを変更するにはどうすればよいですか?
- 22. IPropertyBagのプロパティを検出するにはどうすればよいですか?
- 23. GeometryDrawingのプロパティをアニメーション化するにはどうすればよいですか?
- 24. ModelAttributeのプロパティをマップするにはどうすればよいですか?
- 25. オブジェクトとしてカスタムコントロールのプロパティグループからプロパティを取得するにはどうすればよいですか?
- 26. インターフェイスを持つオブジェクトをプロパティとしてシリアル化するにはどうすればよいですか?
- 27. Flexで日付としてE4Xプロパティを解釈するにはどうすればよいですか?
- 28. boolプロパティをプロパティグリッドにYes/Noとして表示するにはどうすればよいですか?
- 29. トリガーを使用して別のファイルで参照されるWPFスタイル内のプロパティを変更するにはどうすればよいですか?
- 30. SpringブートでコンストラクタインジェクションでYAMLプロパティを使用するにはどうすればよいですか?
まあ、日付/時刻が常に二重のある小数部分が – Marco
(当日の一部として)分と秒を表している整数部は、日を表して、私はそれがあることを理解します技術的には二倍ですが、RTTIを使用してTDateTimeとして定義されているかどうかを確認する方法はありますか? – Barry