-1

基本上我有两个类,例如 A 类和 B 类

A类包含一个列表,List A

B类包含一个列表,List B

每当我打开一个文件时,我使用 B 类并填充列表 B。现在要编辑此文件,我必须填充列表 A,我通常在 A 类中创建一个 B 类对象。

IE

B file = new B; //creates an object of B
A = file; // assign B to A so all contents of B will populate A

我遇到的问题是,每当我将一个项目添加到列表 A 时,它会自动更新 B 类中的列表 B。我已将列表 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 类中添加的方法时才在列表 A 中添加一个项目并在 B 类中更新列表 B。

但每当我这样做时:

A.Add(item); // this adds item to List A BUT also adds an item automatically in List    B(in Class B).

知道为什么会这样吗?我调试了代码,但我不知道上面一行发生了什么。

4

2 回答 2

1

你说:

B文件=新B;//创建一个B对象

A = 文件;// 将 B 分配给 A,因此 B 的所有内容都将填充 A

这是不正确的。您显然期待 的副本file,但您确实得到了对它的引用。

这意味着更改A必然意味着更改B

如果你想要一个副本,你需要一个构造函数:

A = new B(file);

...并且该构造函数应该制作一个B包含任何内容的新鲜file内容。这样,对一个的更改不会影响另一个。然后,您可以在您选择的任何对象上调用您的方法。

于 2013-09-19T11:43:01.567 回答
-1

简单地对列表执行 = 运算符将使它们相互关联,因此它们的内部数据是共享的。

如果你想复制,试试这个:

A = new List<typeOfList>(B)
于 2013-09-19T11:41:08.257 回答