Sử dụng hệ thống RTTI trong Delphi 2010, có cách nào để tìm hiểu xem thuộc tính có phải là TDateTime không? Nó hiện đang xử lý nó như là một đôi bất cứ khi nào tôi gọi lại asVariant và cũng có thể nếu tôi kiểm tra loại tài sản. Đây có phải là do thực tế nó chỉ có thể nhìn thấy loại cơ sở? (TDateTime = kép)Làm thế nào tôi có thể phân biệt các thuộc tính TDateTime từ các thuộc tính Đôi với RTTI?
17
A
Trả lời
22
Hãy thử kiểm tra Name
tài sản của TRttiProperty.PropertyType
Tôi không có Delphi năm 2010, nhưng công trình này trong 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.
mã này trả về
the property Date1 is TDateTime
the property Date2 is TDateTime
3
Điểm then chốt ở đây trong khi xác định loại là loại chỉ thị. Hai định nghĩa khác nhau:
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
Rõ ràng OP không khai báo các loại được đề cập, vì vậy về mặt kỹ thuật, đây không phải là câu trả lời, nhưng bạn hoàn toàn đúng và lời giải thích bổ sung này là thông tin tốt. +1 – NGLN
Các vấn đề liên quan
- 1. Delphi Rtti: Khám phá các thuộc tính của giao diện?
- 2. Delphi RTTI: Nhận lớp thuộc tính
- 3. Tôi có thể đặt thuộc tính `thuộc tính` của` UILabel`
- 4. Tạo XSD từ các kiểu trong assembly với xsd.exe, có các thuộc tính dataannotation trên các thuộc tính
- 5. Làm cách nào tôi có thể gán một thuộc tính cho một thuộc tính
- 6. Làm thế nào tôi có thể đọc tất cả các thuộc tính từ một XML với VBA?
- 7. Có thuộc tính bean bean được làm mới tự động từ các tệp thuộc tính
- 8. Ghi đè thuộc tính với thuộc tính
- 9. Làm cách nào để tạo các thuộc tính trong các tệp thuộc tính trong Mùa xuân?
- 10. Backbone.JS xử lý các mô hình với các thuộc tính được tính như thế nào
- 11. MVC 3 Các thuộc tính bắt buộc có tính chất
- 12. JQuery - Làm cách nào tôi có thể viết bộ chọn 'Thuộc tính Chứa' phân biệt chữ hoa chữ thường?
- 13. Làm thế nào tôi có thể kiểm tra một bộ điều khiển với các thuộc tính giải quyết trong AngularJS?
- 14. Thuộc tính sao chép thuộc tính không khớp với thuộc tính được thừa hưởng từ MKAnnotation
- 15. Làm thế nào để tôi mongoexport thuộc tính từ một mảng các đối tượng để CSV?
- 16. Làm thế nào để liên kết một thuộc tính boolean với thuộc tính rendered?
- 17. Thử nghiệm cho các thuộc tính từ bên trong mã của các thuộc tính khác
- 18. Làm thế nào để tôi nói với TypeScript về việc bổ sung động các thuộc tính?
- 19. Sự khác biệt giữa các thuộc tính thuộc tính trong mục tiêu-c
- 20. Tôi có thể định nghĩa các thuộc tính trong các lớp một phần, sau đó đánh dấu chúng với các thuộc tính trong một lớp khác không?
- 21. Hạn chế OWL - xác định các lớp chỉ chứa các thuộc tính có giá trị thuộc tính cụ thể
- 22. Ghi đè các thuộc tính
- 23. Làm thế nào tôi có thể console.log chức năng cùng với tất cả các thuộc tính của họ?
- 24. Làm thế nào tôi có thể nhận được hành vi kiến khi mở rộng các thuộc tính với gradle?
- 25. Thay thế các thuộc tính là gì?
- 26. Tôi có thể có thuộc tính [] chung này không?
- 27. Làm thế nào bạn có thể thiết lập các thuộc tính lớp từ các đối số biến (kwargs) trong python
- 28. Đặt lại thuộc tính từ lưới thuộc tính
- 29. SelectListItem với các thuộc tính dữ liệu
- 30. Xác thực các thuộc tính với System.ComponentModel.DataAnnotations.Validator
Vâng, một ngày/giờ luôn luôn là một đôi, trong đó một phần số nguyên đại diện cho ngày, trong khi phần thập phân đại diện cho phút và giây (như là một phần của một ngày) – Marco
Tôi hiểu đó là một đôi về mặt kỹ thuật nhưng có cách nào tôi có thể sử dụng RTTI để kiểm tra nếu nó được định nghĩa là một TDateTime ban đầu – Barry