列出<t>添加问题</t>

时间:2013-09-19 11:36:29

标签: c# list

基本上我有两个类,例如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).

知道为什么会这样吗?我调试代码,但我不知道上面的行是怎么回事。

2 个答案:

答案 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)