2016-01-20 61 views
-1

我的函數只在編譯後才工作。當它第二次去它不起作用。當第二次使用函數時,列表爲空

我有添加新項目到我的清單的功能。

public void addToDetailList() 
    { 
     tablist.Add(new OneStudentEvent() 
     { 
      Indeks = oneEvent.Indeks, 
      Parts = oneEvent.Parts, 
      Present = oneEvent.Present, 
      PresentcString = oneEvent.PresentString 
     }); 
    Console.Write("\nCount: " + tablist.Count); 
    } 

而在其他功能我已返回到此列表。

public List<OneStudentEvent> getDetailEventInfo() 
    { 
     Console.Write("\ndb. Count on return: " + tablist.Count); 
     return tablist; 
    } 

當我第一次編譯和運行程序時,一切正常。 但第二次,tablist.Count = 0。

輸入addToDetailList()之前清除我的列表:

 if(tablist.Count>0) 
     { 
      for (int i = tablist.Count - 1; i >= 0; i--) 
      { 
       tablist.RemoveAt(i); 
        Console.Write("\nUSUWAM WIERSZE Z LISTY element: " +i); 
      } 
     } 

輸出:

次數:5 計數的回報:5

次數:5 計數的回報:0

+0

tablist在哪裏定義? –

回答

0

getDetailEventInfo返回指向tablist的指針。也就是說,它是而不是生成一個新的列表。

運行var myList = getDetailEventInfo()然後從tablist刪除項目意味着你是從myList列表以及刪除項目。這是一個一樣的。

如果你改變你的方法是不是:

return tablist.ToList(); 

然後你會返回一個全新的列表(這是源代碼的副本),並按照預期的代碼將工作。

+0

我的步驟: 1:刪除 - 如果(計數> 0) 2.addToDetailList() 3 getDetailEventInfo() 所以我應該用除辭職? 或者我應該讀些關於「這個」的內容。 – zdunek25

+0

@ zdunek25您不必刪除任何內容..只需在'getDetailEventInfo'結尾添加'.ToList()':) – Rob