【发布时间】:2016-10-11 17:26:31
【问题描述】:
假设我有这 2 个类:
public class BlockBuilding
{
private List<Room> rooms;
...
public class Room
{
private List<Chair> chairs;
....
然后我声明一个二维数组变量并赋值:
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 而它们中的每一个应该只包含一把椅子。
以上代码结构与我的代码相似,由于披露协议的限制,不允许披露我的代码。我已经被这个错误困扰了好几个星期了。任何帮助将不胜感激!
【问题讨论】:
-
你有一个单人间。那为什么不包含两把椅子呢?
-
您为两座建筑添加了同一个房间。
-
我认为房间是按值而不是按引用添加的。那我会尝试从这个方向解决问题。
-
您创建一个房间
room,然后将其添加到两栋建筑b1和b2。它不是“按价值添加”,您正在向两座建筑物添加对相同对象的引用。您只需要实例化两个单独的房间并将它们添加到各自的建筑物中。就像您如何创建两把椅子一样
标签: c# arrays list multidimensional-array