2016-08-05 82 views
0

我有一些问题。我无法通过以下代码正确重新定义变量。如何重新定义一个TStringList类型变量

 UnitObj.prjOne:=ReturnRightList(0); 
     for j:=0 to UnitObj.prjOne.Count-1 do 
      str:=UnitObj.prjOne.ValueFromIndex[j];//here i get for example '32' 

     UnitObj.prjTwo:=ReturnRightList(1); 
     for j:=0 to UnitObj.prjTwo.Count-1 do 
      str1:=UnitObj.prjTwo.ValueFromIndex[j];//here i get for example '40' 

     for j:=0 to UnitObj.prjOne.Count-1 do 
      str4:=UnitObj.prjOne.ValueFromIndex[j]; // WHY HERE I GET '42' instead of '32' 

     UnitObj.prjThird:=ReturnRightList(2); 
     for j:=0 to UnitObj.prjThird.Count-1 do 
      str2:=UnitObj.prjThird.ValueFromIndex[j];//here i get for example '42' 


procedure TfrmLogin.FormCreate(Sender: TObject); 
begin 
    roleList:=TStringList.Create; 
end; 
function TfrmLogin.ReturnRightList(bPos:integer):TStringList; 
var sqlString:string; 
begin 
    roleList.Clear(); 
    case bPos of 
     0:sqlString0;//some sql queries 
     1:sqlString1; 
     2:sqlString2;  
    end; 
     SQLQueryPrjRight.Close; 
     SQLQueryPrjRight.SQL.Strings[5]:=sqlString; 
     SQLQueryPrjRight.ParamByName('ID').Value:=uInfo.ID; 
     SQLQueryPrjRight.Open; 
     while not SQLQueryPrjRight.EOF do 
       begin 
      roleList.Add(IntToStr(SQLQueryPrjRight.FieldByName('pID').AsInteger)); 
      SQLQueryPrjRight.Next; 
      end; 
    Result:=roleList; 
end;       

在函数ReturnRightList我填写一个TStringList roleList,它分配给prjOne,prjTwo,prjThird。但是在这之后,我得到了三个相同内容的TStringLists。为什么会发生以及如何解决?谢谢

+0

rolelList应该是一个由3个TStringLists组成的数组。修改代码以创建roleList [0],roleList [1],roleList [2]并更改代码以每次处理相应的TStringList。 – Scooter

回答

2

您只有一个字符串列表实例。请注意,您只需拨打TStringList.Create一次。因此只有一个实例。每次填充列表时,都会填充相同的列表实例,覆盖以前的内容。

您需要实例化三个不同的实例。我无法真正地告诉你如何实现这个,因为我看不到你的程序。但是,您需要拨打TStringList.Create三次,每个列表一个,将这些新创建的列表存储在变量prjOneprjTwoprjThree中。您还需要删除没有用处的roleList

理解所有这一切的关键是参考类型的概念。一个类是一个引用类型。因此TStringList类型的变量是对实例的引用。这是一个指向实例的指针。当您分配给参考类型变量时,您正在复制参考(指针)并且不复制该值。这意味着在您的代码中,所有三个变量prjXXX都指向或指向相同的对象实例。

+0

好吧,但我不明白我需要在这种情况下使用三个不同的实例 – user2032083

+0

你需要三个不同的列表,但你只有一个。一个列表如何能够保存三个不同的值? –