基本上我有两个类,例如A类和B类
A类包含一个列表,列表A
B类包含一个列表,列表B
每当我打开文件时,我都使用B类并填充List B.现在要编辑这个文件我必须填充List A,我通常在A类中创建一个B类对象。
即。
B file = new B; //creates an object of B
A = file; // assign B to A so all contents of B will populate A
我遇到的问题是每当我向List A添加一个项目时,它会自动更新B类中的List B.我已将List B设置为:
List<typeofList> B {get; private set;}
//a default constructor
public B()
{
B = new List<typeofList>();
}
// a constructor used to set updated list
public B(List<typeofList> thisCurrentList)
{
B = thisCurrentList;
}
public addItemsToListB()
{
//codes for adding
//popoulates List B
}
我想要实现的是在列表A中添加一个项目并仅在类B中更新列表B,如果我调用一个在A类中进行添加的方法。
但每当我这样做时:
A.Add(item); // this adds item to List A BUT also adds an item automatically in List B(in Class B).
知道为什么会这样吗?我调试代码,但我不知道上面的行是怎么回事。
答案 0 :(得分:1)
你说:
B file = new B; //创建一个B
的对象A =文件; //将B分配给A,因此B的所有内容都将填充A
这是不正确的。你显然期待file
的副本,但你真的得到它的参考。
这意味着对A
的更改必然意味着对B
的更改。
如果你想要一个副本,你需要一个构造函数:
A = new B(file);
...而且构造函数应该创建一个包含B
所包含内容的新file
。这样,对一个的更改不会影响另一个。然后,您可以在您选择的任何对象上调用您的方法。
答案 1 :(得分:-1)
简单地使用列表执行=运算符会使它们相互关联,因此它们的内部数据是共享的。
如果你想复制,试试这个:
A = new List<typeOfList>(B)