c#中删除列表中的列表元素的问题
本文关键字:列表元素 问题 删除列 删除 列表 | 更新日期: 2023-09-27 18:15:09
我有一个程序,其中我有三个类a, B和C。A包含一个成员,该成员是B的列表,B包含一个成员,该成员是C的列表。A包含一个名为RemoveB()的方法,类似地,B包含一个名为RemoveC()的方法。RemoveB()和RemoveC()分别删除BList和CList的第一个元素。
内容如下:
class A
{
...
List<B> BList;
...
public void RemoveB()
{
this.BList.Removeat(0)
}
}
class B
{
...
List<C> CList;
...
public void RemoveC()
{
this.CList.Removeat(0)
}
}
class Trial
{
...
}
在我的主函数中,我首先在每个BList元素中填充BList和CList。BList中有N个元素,每个BList元素包含CList中的M个元素。然后我做以下操作:
A aObject = new A(); // Populates BList and CList.
for(int i = 0; i < N; i++)
{
Console.WriteLine("BList: {0} ({1})", i, aObject.BList[0].Count);
for (int j = 0; j < M; j++)
{
Console.WriteLine("CList: {0}", j);
aObject.BList[0].RemoveC();
}
aObject.RemoveB();
}
当我这样做时,我得到以下问题。当我试图删除CList中属于元素BList[0]的元素时,CList中对应的元素在BList[1], BList[2]…BList[N-1]也被删除。下面是我运行程序后看到的输出。
BList 0 (M)
CList 0
CList 1
CList 2
.
.
.
CList M-1
BList 1 (0)
BList 2 (0)
BList 3 (0)
.
.
.
BList N-1 (0)
谁能告诉我为什么会这样?我是不是犯了什么根本性的错误
如何在A下填充列表和列表?也许您已经创建了一个CList并使用它来初始化所有的B对象?
使用Queue of B或Queue of C代替Lists怎么样?它们应该反映你想要的更自然的行为(我会用while(queue)去排队)。计数> 0){…}循环)。另外,问题似乎在于您填充列表的位置。更准确地说,我认为你的推荐信可能弄错了。这里的代码会有帮助。
看起来像是在a构造函数中创建B和C元素的方式有问题。您是否使用new关键字来创建每个单独的B元素和C元素以及C元素列表?如果你只是在某个时候复制它们,那么它们在内存中可能仍然是相同的实际对象,更改或删除其中一个也可以对其他对象做同样的事情。