我需要添加一些初始化而不向var
部分添加变量声明,所以我尝试这样做:
sql.columns.Add(with TColumn.Create do
begin
ColName := 'Price';
As_ := 'MaxPrice';
end);
但Delphi在编译时会引发错误。
有什么想法吗?
答案 0 :(得分:5)
TList<T>.Add()
期望完全构造的对象作为输入。 with
关键字不允许您访问其正在操作的对象。无论你喜欢与否,你都需要使用变量:
var
col: TColumn;
col := TColumn.Create;
col.ColName := 'Price';
col.As_ := 'MaxPrice';
sql.columns.Add(col);
替代方法是编写函数,并使用其特殊的Result
变量:
function MakeColumn(const AName, AAs: string): TColumn;
begin
Result := TColumn.Create;
Result.ColName := AName;
Result.As_ := AAs;
end;
sql.columns.Add(MakeColumn('Price', 'MaxPrice'));