在'with'语句中创建对象而不使用变量

时间:2020-08-17 18:37:58

标签: variables delphi with-statement declare

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;

1 个答案:

答案 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;