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)

谁能告诉我为什么会这样?我是不是犯了什么根本性的错误

c#中删除列表中的列表元素的问题

如何在A下填充列表和列表?也许您已经创建了一个CList并使用它来初始化所有的B对象?

使用Queue of B或Queue of C代替Lists怎么样?它们应该反映你想要的更自然的行为(我会用while(queue)去排队)。计数> 0){…}循环)。另外,问题似乎在于您填充列表的位置。更准确地说,我认为你的推荐信可能弄错了。这里的代码会有帮助。

看起来像是在a构造函数中创建B和C元素的方式有问题。您是否使用new关键字来创建每个单独的B元素和C元素以及C元素列表?如果你只是在某个时候复制它们,那么它们在内存中可能仍然是相同的实际对象,更改或删除其中一个也可以对其他对象做同样的事情。