在c#列表中插入不同的值

本文关键字:插入 列表 | 更新日期: 2023-09-27 18:12:32

假设我有两个类:

public class BlockBuilding
{
    private List<Room> rooms;
...
public class Room
{
    private List<Chair> chairs;
....

然后声明一个2D数组变量并赋值:

BlockBuilding[,] bB= new BlockBuilding[2,1];
Room room = new Room();
BlockBuilding b1 = new BlockBuilding();
BlockBuilding b2 = new BlockBuilding();
b1.getRooms().Add(room);
b2.getRooms().Add(room);
bB[0,0] = b1;
bB[1,0] = b2;
Chair c1 = new Chair();
Chair c2 = new Chair();
bB[0,0].getRooms()[0].getChairs().Add(c1);
bB[1,0].getRooms()[0].getChairs().Add(c2);

假设所有必要的数据都在那里,没有NullException问题,当我试图在bB[0,0]和bB[1,0]中显示椅子时,令人惊讶的是,它们都包含c1和c2,而它们每个都应该只包含一把椅子。

以上代码结构与我的代码相似,由于披露协议的限制,不允许披露我的代码。这几个星期来,我一直被这个虫子所困扰。任何帮助将非常感激!

在c#列表中插入不同的值

你应该使用两个不同的房间,因为因为它是一个参考,你是在为两个BlockBuildings添加相同的房间…

Room room1 = new Room();
Room room2 = new Room();
BlockBuilding b1 = new BlockBuilding();
BlockBuilding b2 = new BlockBuilding();
b1.getRooms().Add(room1);
b2.getRooms().Add(room2);

class是通过引用传递的,所以您向两个房间添加了相同的对象。

如果你想要"按值复制"的功能,你要么需要使用struct(确保首先阅读一些"c#值与引用类型"的文章,如参考和值)。

或者,您可以在将对象添加到列表之前对对象进行深度复制(深度克隆对象)。

谢谢大家!事实上,我是c#的新手,我的项目严重依赖于它。有太多有用的答案,我不能把任何人评为"最"有用的答案,因为你们都是最好的!是的,问题在于单个房间实例,为每个BlockBuilding创建不同的房间实例将立即解决问题。