當我想在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();
}
在這段代碼中,我想將鏈表推送到堆棧,而不是刪除列表中的所有項目。當我清除列表時,我的堆棧的第一個索引消失,因爲它通過引用傳遞。我錯了嗎?因爲我不知道它爲什麼會發生。
所以我使用傳值方法。
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請注意,按值傳遞引用與傳遞引用不同。 –