更改变量也会更改另一个变量。防止变量具有相同的引用

时间:2011-05-24 01:29:42

标签: c# pass-by-reference pass-by-value

我有一个类,构造函数需要一个类和其他类似的东西:

public class SomeClass<T>
{
    //global private variables for class
    List<T> originalList = new List<T>;
    List<T> tempList = new List<T>;

    public SomClass(List<T> listParam, string name, ..etc)
    {
        originalList = listParam;
        tempList = listParam;

        originalList.removeAt(0);  // this also removes an item from tempList.


    }
}

我知道这是因为originalList和tempList具有相同的引用。我怎么能让他们有不同的参考。我使用tempList来过滤结果,每当我想刷新时,我都使用originalList

2 个答案:

答案 0 :(得分:5)

您可以复制listParam,而不只是分配其参考:

tempList = listParam.ToList();

请注意,这不会创建列表中每个对象的副本,而只是对这些对象的引用的副本。

答案 1 :(得分:1)

不接受List<T>,而是接受IEnumerable<T>。如果您想要一个具体列表,请在其上调用.ToList()

原始来源不受影响,您有副本。您还可以获得支持该界面的任何内容。

编辑:我误解了问题中的代码,您的副本属于同一个类。嗯,它在两个地方,类调用者。我支持我的建议,但是,你需要两次.ToList()的调用,每个副本一次。