Delphi 动态设置包含datetime的对象的属性

Delphi 动态设置包含datetime的对象的属性,delphi,rtti,delphi-10.1-berlin,Delphi,Rtti,Delphi 10.1 Berlin,我使用Delphi的RTTI创建、调用和设置不同对象的属性有很多不同的方法。但现在我遇到了一个错误,设置一个TDateTime会触发一个错误,比如:“无法将变量转换为double”。谷歌在搜索此错误时没有帮助 到目前为止,我正在定义任何类型的对象,例如: TExample = class private FDateField : TDateTime; published property DateField : TDateTime read FDateField write FDateF

我使用Delphi的RTTI创建、调用和设置不同对象的属性有很多不同的方法。但现在我遇到了一个错误,设置一个
TDateTime
会触发一个错误,比如:“无法将变量转换为double”。谷歌在搜索此错误时没有帮助

到目前为止,我正在定义任何类型的对象,例如:

TExample = class
private
  FDateField : TDateTime;
published
  property DateField : TDateTime read FDateField write FDateField;
end;
然后我将这个对象放入一个
TObjectList
,然后循环一些与问题无关的内部逻辑。但是当我进入
DateField
属性时,它会触发错误。我试着这样设置:

objPropValue := '12/02/2018 12:25:00';
objPropName := 'DateField';
if IsPublishedProp(parameterObject, objPropName) then
begin
  SetPropValue(parameterObject, objPropName, objPropValue); <- doesn't work on DateField
end;
objPropValue:='12/02/2018 12:25:00';
objPropName:=“日期字段”;
如果IsPublishedProp(parameterObject,objPropName),则
开始

SetPropValue(parameterObject、objPropName、objPropValue) 尽管有错误消息,但您在这里尝试的是为日期指定一个字符串,这是您无法做到的。如果你这样做了

    objPropValue := '12/02/2018 12:25:00';
    objPropName := 'DateField';
    if IsPublishedProp(parameterObject, objPropName)  then
    begin
      SetPropValue(parameterObject, objPropName, StrToDateTime(objPropValue));
    end;
它会很好用的。当然,这只是为了举例说明。如果objPropValue是一个变量(您没有显示),则可以使用

    objPropValue := StrToDateTime('12/02/2018 12:25:00');
    objPropName := 'DateField';
    if IsPublishedProp(parameterObject, objPropName)  then
    begin
      SetPropValue(parameterObject, objPropName, objPropValue);
    end;

相反。

这是一个例子。我不知道什么是PropValue,所以我不能只是简单地假设和定义时间。值可以是任何类型。现在我正试图找到一种方法来检查属性类型,然后在那里进行转换。不过,这是您必须做的。当然,您可以检查参数类型,但是如果不查看代码,我就不可能知道从何处获取属性值。我觉得我已经回答了您提出的问题。“这只是一个硬编码的示例,objPropValue和Name设置在一个循环中,可以是任何其他类型。”我在问题中写下了这一点。这只是我遇到的问题的一个例子,类型不总是datetime。是写的。因此,感谢您的努力,但这并不是我问题的答案。如果您想要更好的答案,请提供一个特别说明什么是objPropValue以及如何获得它的答案。没有这一点,你的问题就没有意义了。网站上有相当多的RTTI专家,如果你给我们足够的信息,他们应该给你你所需要的。@john你能自己写一个答案吗,你是怎么做到的?