У меня есть небольшая проблема, когда я хочу выполнить некоторые операции в C#. Я приведу вам небольшой пример.Стек общего списка очищается при удалении пустого списка
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();
}
В этом коде я хочу переместить мой связанный список в стек, чем удалить все элементы в списке. Когда я очищаю список, первый индекс моего стека исчезает, потому что он передается по ссылке. Я ошибаюсь? Потому что я не знаю, почему это происходит.
Так что я использую метод pass by value.
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();
}
Это хороший способ решить проблему? Таким образом, он работает, но читаемость уменьшается. Что ты предлагаешь мне?
Благодаря ...
«Я не прав?» Да, в коде, который вы показали, нет пропущенных ссылок. Вы можете сказать это из-за отсутствия 'ref' и' out'. Я предлагаю вам прочитать http://jonskeet.uk/csharp/parameters.html и http://jonskeet.uk/csharp/references.html. Обратите внимание, что передача ссылки по значению не совпадает с передачей по ссылке. –