Delphi新手转换JSON为类时调用ToString报无对应重载版本错误
Delphi TStringBuilder.ToString 重载报错解决方案
报错根因
Delphi 原生的TStringBuilder类的ToString方法不存在接受布尔类型参数的重载,你代码中调用ToString(True)传入了布尔参数,和已有的方法签名不匹配,因此触发编译错误。
修复方法
直接删除ToString调用的入参True,调用无参版本即可返回拼接完成的完整字符串,修正后的代码如下:
with TStringBuilder.Create do try for s in List do Append(s); Result := ToString; finally free; end;
可选优化建议
with语句在Delphi中容易引发变量作用域混淆的问题,新手使用时更容易出现意料之外的错误,建议改为显式声明实例变量的写法,可读性和可维护性更高:
var LStrBuilder: TStringBuilder; begin LStrBuilder := TStringBuilder.Create; try for s in List do LStrBuilder.Append(s); Result := LStrBuilder.ToString; finally LStrBuilder.Free; end; end;
额外说明
你会写出带布尔参数的ToString调用,大概率是混淆了其他类的同名方法逻辑,比如部分版本的TStringList的相关方法有接收布尔参数控制是否包含换行的重载,但TStringBuilder本身不需要这个参数,所有内容已经通过Append调用拼接在内部缓冲区中,直接调用无参方法就能拿到全部拼接结果。
内容的提问来源于stack exchange,提问作者Pablo Campos
相关产品推荐
相关产品推荐

