将不同的值插入列表c#

时间:2016-10-11 17:26:32

标签: c# arrays list multidimensional-array

假设我有这2个课程:

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,而每个都包含c1和c2应该只包含一把椅子。

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

3 个答案:

答案 0 :(得分:0)

你应该使用两个不同的房间,因为它是一个参考,你为两个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);

答案 1 :(得分:0)

class通过引用传递,因此您将同一个对象添加到两个房间。

如果您想要“按值复制”功能,则需要使用struct(请务必先阅读一些“C#值与参考类型”文章,如References and Values)。

或者,您可以在添加到列表之前对对象进行深层复制(Deep cloning objects)。

答案 2 :(得分:0)

谢谢你们!事实上,我是C#的新手,我的项目非常依赖它。有太多有用的答案,我实际上不能评价任何人作为“最”有用的答案,因为你们所有人都是最好的!是的问题是单个房间实例,为每个BlockBuilding创建不同的房间实例将立即解决问题。