2016-01-20 1 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: удаление - если (Count> 0) 2.addToDetailList() 3 getDetailEventInfo() Так я должен уйти в отставку с удалением? Или я должен кое-что прочитать о «этом». – zdunek25

+0

@ zdunek25 Вам не нужно ничего удалять .. просто добавьте '.ToList()' в конце 'getDetailEventInfo' :) – Rob