Usando el sistema RTTI en Delphi 2010, ¿hay alguna forma de averiguar si una propiedad es un TDateTime? Actualmente lo estoy tratando como un doble cada vez que llamo como Variant y también si reviso el tipo de propiedad. ¿Esto se debe al hecho de que solo puede ver el tipo de base? (TDateTime = doble)¿Cómo puedo distinguir las propiedades de TDateTime de las propiedades dobles con RTTI?
17
A
Respuesta
22
trate de comprobar la propiedad de la Name
TRttiProperty.PropertyType
no tengo Delphi 2010, pero esto funciona en 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.
este código devuelve
the property Date1 is TDateTime
the property Date2 is TDateTime
3
punto clave aquí mientras se define un tipo es el tipo Directiva. Estas dos definiciones son diferentes:
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
Obviamente, OP no declaró los tipos en cuestión, por lo que técnicamente esto no es una respuesta, pero tiene toda la razón, aunque esta explicación adicional es buena. +1 – NGLN
Cuestiones relacionadas
- 1. Delphi Rtti: Explore las propiedades de las interfaces?
- 2. ¿Cómo accedo a las propiedades de matriz de Delphi usando RTTI
- 3. EntityFramework cómo sobrescribir las propiedades
- 4. Enfoque correcto de las propiedades
- 5. ¿Cómo puedo hacer que las propiedades de los archivos de propiedades sean obligatorias en Spring?
- 6. ¿Cómo encontrar las propiedades de un objeto?
- 7. Cómo enumerar todas las propiedades de clase
- 8. ¿Cómo definir correctamente las propiedades de clase?
- 9. ¿Cómo puedo iterar sobre las propiedades de un archivo?
- 10. que imita las propiedades anidadas con mock
- 11. ¿Hay alguna manera de usar un creador de estilos para las propiedades de las propiedades?
- 12. Ignorar dinámicamente las propiedades con JacksonJson
- 13. Obtener las propiedades de un tipo dinámico
- 14. leer el nombre de las propiedades desconocidas
- 15. ¿Cómo usar las propiedades de hashmap con JAXB?
- 16. ¿Cómo hacer que las propiedades sean privadas?
- 17. ¿Cambiar las propiedades de la fuente UINavigationBar?
- 18. ¿Dónde puedo encontrar una lista de las propiedades de Transformer.setOutputProperty?
- 19. silverlight: cómo establecer las propiedades adjuntas Programáticamente
- 20. ¿Cómo puedo enumerar todas las propiedades del objeto Math?
- 21. Asignación de todas las propiedades de tipo 'X' con AutoMapper
- 22. XmlSerializer. Mantener las propiedades de cadena nulas?
- 23. Modificación de las propiedades del documento PDF
- 24. GLKView establece las propiedades dibujables
- 25. UIButton Subclase - ¿Configurando las Propiedades?
- 26. Hacer cálculos en las propiedades
- 27. ¿Mapa solo cambió las propiedades?
- 28. ¿Deben las interfaces definir propiedades?
- 29. Portabilidad de las propiedades nativas de C++
- 30. ¿Reflejando todas las propiedades de una interfaz, incluidas las heredadas?
Bueno, una fecha/hora es siempre un doble en la que la parte entera representan días, mientras que parte fraccionaria representa minutos y segundos (como parte de un día) – Marco
entiendo que es una doblemente técnico, pero ¿hay alguna manera en que pueda usar RTTI para verificar si está definido como un TDateTime originalmente – Barry