2016-08-05 42 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

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