我有一个类,构造函数需要一个类和其他类似的东西:
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
答案 0 :(得分:5)
您可以复制listParam
,而不只是分配其参考:
tempList = listParam.ToList();
请注意,这不会不创建列表中每个对象的副本,而只是对这些对象的引用的副本。
答案 1 :(得分:1)
不接受List<T>
,而是接受IEnumerable<T>
。如果您想要一个具体列表,请在其上调用.ToList()
。
原始来源不受影响,您有副本。您还可以获得支持该界面的任何内容。
编辑:我误解了问题中的代码,您的副本属于同一个类。嗯,它在两个地方,类和调用者。我支持我的建议,但是,你需要两次.ToList()
的调用,每个副本一次。