var
UserName, NickName, UserID: string;
begin
with TStringList.Create do
begin
CommaText := 'ali,veli,4950';
UserName := x[0]; //what is x ? (x is Tstringlist.create)
NickName := x[1];
UserID := x[2];
end;
end;
如果我使用以下代码,则可以使用。但是我不想声明一个变量。我可以将其与任何变量一起使用吗?
如何在with
语句中使用它?
var
tsl: TStringList;
begin
tsl := TStringlist.Create;
with tsl do
begin
CommaText := 'ali,veli,4950';
UserName := tsl[0];
NickName := tsl[1];
UserID := tsl[2];
end;
end;
答案 0 :(得分:6)
直接在with
语句中创建对象时,没有语法可以引用该对象(除非它提供了一个引用自身的成员,这种情况很少见),因此通常必须使用变量,就像您的底层代码一样。
另外,这两个代码都泄漏了TStringList
对象,因为在使用完对象后您不会对其调用Free()
。
话虽这么说,在这个特殊示例中,[]
运算符只是访问TStrings.Strings[]
默认属性的简写,您可以 无需使用变量即可访问创建的TStringList
对象,就像使用TStrings.CommaText
属性一样,例如:
var
UserName, NickName, UserID: string;
Begin
with TStringList.Create do
try
CommaText := 'ali,veli,4950';
UserName := Strings[0];
NickName := Strings[1];
UserID := Strings[2];
finally
Free;
end;
end;