Mam mały problem, gdy chcę wykonać niektóre operacje w języku C#. Dam ci mały przykład.Stos listy ogólnej zostanie wyczyszczony po wyczyszczeniu listy wypychanej
Stack<List<HufmannLetter>> steps = new Stack<List<HufmannLetter>>();
List<HufmannLetter> letterList = new List<HufmannLetter>();
while(true){
letterList.Add("asd");
letterList.Add("sad");
steps.Push(letterList);
letterlist.Clear();
}
W tym kodzie chcę przesunąć listę odnośników do stosu niż usunąć wszystkie pozycje z listy. Po wyczyszczeniu listy pierwszy indeks mojego stosu znika, ponieważ jest przekazywany jako odniesienie. Czy się mylę? Ponieważ nie wiem, dlaczego tak się dzieje.
Używam metody "przekazuj według wartości".
Stack<List<HufmannLetter>> steps = new Stack<List<HufmannLetter>>();
List<HufmannLetter> letterList = new List<HufmannLetter>();
while(true) {
letterList.Add("asd");
letterList.Add("sad");
List<HufmannLetter> tempLetterList = new List<HufmannLetter>(letterList);
steps.Push(tempLetterList);
letterlist.Clear();
}
Czy to dobry sposób na rozwiązanie problemu? W ten sposób działa, ale czytelność maleje. Co mi sugerujesz?
Dzięki ...
"Czy się mylę?" Tak, w kodzie, który pokazałeś, nie ma przejścia. Można to stwierdzić przez brak "ref" i "out". Sugeruję, abyś przeczytał http://jonskeet.uk/csharp/parameters.html i http://jonskeet.uk/csharp/references.html Zwróć uwagę, że przekazanie referencji według wartości nie jest tożsame z przekazywaniem referencji. –