清除推送列表时,清除通用列表堆栈

Ber*_*kin 6 c# parameter-passing generic-collections

当我想在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();    
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,我想将我的链表推送到堆栈而不是删除列表中的所有项目.当我清除列表时,我的堆栈的第一个索引消失,因为它通过引用传递.我错了吗?因为我不知道为什么会这样.

所以我使用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();    
}
Run Code Online (Sandbox Code Playgroud)

这是解决问题的好方法吗?这样它工作,但可读性降低.你有什么建议我的?

谢谢...

Bot*_*tos 3

List<HufmannLetter>只需在循环内创建一个新对象并将其添加到堆栈中即可。重用相同的列表对象不会带来任何性能优势。

Stack<List<HufmannLetter>> steps = new Stack<List<HufmannLetter>>();

while(true)
{
    List<HufmannLetter> letterList = new List<HufmannLetter>();

    letterList.Add("asd");
    letterList.Add("sad");

    steps.push(letterList);
}
Run Code Online (Sandbox Code Playgroud)