我是一个Delphi 6类对象,包含一个由30个变量组成的数组,每个变量通过不同的索引属性公开。例如:
property responseCode: integer
Index 7 read getIndexedProperty_integer write setIndexedProperty_integer;
我这样做是为了让使用变体数组更加容易(有助于IDE的自动完成)并提供类型安全性。它很好用,但现在我遇到了一个问题。当包装它的类被构造时,变体数组被初始化为NULL,因此我可以知道是否曾经给某个变体实例化过值。这样做的一个后果是,如果只有一些变体被实例化(给定有效值),任何尝试访问当前表示NULL变体的属性的操作都会导致Variant转换错误,因为Delphi尝试将变体转换为索引属性声明的类型。
我不想为每个索引属性声明一个“isValid”属性。我想知道是否有一种方法可以使用TypeInfo库获取基础Variant的原始值,而无需直接访问索引属性,从而触发转换异常。然后,我就可以编写如下代码(使用上面的示例属性):
isValidProperty(responseCode);
如果响应代码属性下层的变量不为空,则该函数将返回TRUE,否则返回FALSE。
我知道我可以遍历类的PPropList属性列表并通过名称访问属性,但这样我就必须使用以下代码:
isValidProperty('responseCode');
是否有一种方法可以以字符串形式传递属性名称,而不像上面的第一个isValidProperty()那样直接传递属性?
getIndexedProperty_integer
方法中的整数属性所知甚少,因此无法以这种方式访问底层变量值。我的建议是修改每个getter方法的代码,添加VarIsNull
函数来检查变量值。 - RRUZ