向客户端数据集添加字段或动态访问它?

Add fields to a clientdataset or access it dynamically?

如果可以做到 Cds.FieldByName('field').Value,向 TClientDataset 添加字段有什么意义?

有参考文献是不是更快? 是'clearer'吗?

的问题
DataSet.FieldByName('field').Value

是一个性能。每次执行此操作时,都会通过数据集的字段集合进行串行搜索,以找到具有所需名称的字段。此搜索未以任何方式进行优化,例如使用二进制搜索或散列算法。因此,如果有很多字段 and/or 您在迭代数据集中的记录时执行此访问,它会对性能产生重大影响。

这是使用对象检查器定义 "persistent" TFields 的原因之一,但不是唯一的原因。您可以使用编译器已知的符号名称获取对特定 TField 的引用,这只会在编译时发生一次。所以是的,它比 FieldByName 快。看你是否觉得更清楚了。

使用持久 TFields 的其他原因包括可以轻松设置计算字段,更重要的是,不需要通过 FieldByNameOnCalcFields 事件。使用 FieldByName 与持久字段的性能损失当然会乘以 OnCalcField 事件中引用的字段数,并且 OnCalcFields 对数据集中的每条记录至少调用一次,即使您不在自己的代码中迭代数据集记录。

以上内容适用于所有 TDataSet 后代,而不仅仅是 TClientDataSet。