在Delphi 2010中使用RTTI系統,有沒有什麼辦法可以找出屬性是否是TDateTime?目前,當我將其作爲變量回撥並且如果檢查屬性類型時,它將其視爲雙倍數。這是由於它只能看到基本類型嗎? (TDateTime類型=雙)我如何區分TDateTime屬性和RTTI的Double屬性?
17
A
回答
22
嘗試檢查的TRttiProperty.PropertyType
的Name
財產我沒有德爾福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
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. 如何使用rtti列出屬性的屬性?
- 2. 我如何設置使用RTTI的嵌套屬性的值
- 3. 如何將屬性分配給屬性
- 4. 如何區分應用程序中的測試屬性和生產屬性?
- 5. 錯誤RTTI可見性信息和缺少的屬性
- 6. Delphi Rtti:探索接口的屬性?
- 7. Delphi RTTI:獲取屬性的類
- 8. Delphi 2010 RTTI - 我如何獲得索引屬性列表?
- 9. 分機區域屬性
- 10. Express會話屬性區分
- 11. 區分屬性和方法同名
- 12. 類和屬性的屬性
- 13. 獲取/設置子屬性使用RTTI
- 14. SQL GROUP BY和DOUBLE VALUE屬性
- 15. .net和屬性屬性
- 16. 值 - 屬性和屬性
- 17. 'datePublished'屬性和HTML'lang'屬性
- 18. 如何通過名稱區分python中的方法和屬性
- 19. 我如何分組模型屬性
- 20. RTTI:如何將動態數組的值聲明爲類屬性
- 21. 在asp.net控件中分配屬性和添加屬性之間的區別
- 22. 區分magento產品屬性和自定義創建的產品屬性
- 23. FactoryBoy分配屬性到SubFactory的屬性
- 24. restkit中的「屬性」和「屬性」有什麼區別
- 25. 輸入屬性和可預測屬性之間的區別
- 26. 螞蟻的屬性值和屬性位置有什麼區別
- 27. ECMAScript 5中屬性描述符和屬性賦值的區別?
- 28. 屬性指令和元素屬性語法之間的區別?
- 29. 如何分配ItemsSource屬性
- 30. 如何讀取分配給某個類的屬性的屬性?
好了,日期/時間始終是一個雙,其中整數部分代表天,而小數部分代表分和秒(如一日的一部分) – Marco
我明白這是一個雙技術,但有什麼辦法我可以使用RTTI來檢查它是否定義爲TDateTime最初 – Barry