C# 为矩形列表中的所有元素指定相同的值

C# 为矩形列表中的所有元素指定相同的值,c#,list,initialization,rectangles,C#,List,Initialization,Rectangles,我是新来C#的,所以请容忍我 我需要使用列表或矩形的列表。 我的问题是,每当我为一个元素设置值时,其他元素也会被设置 例如,如果我的列表是“m_aRectWBLD”,大小为2 x 4, 当我设置“m_aRectWBLD[0][0]”时,也会设置“m_aRectWBLD[1][0]” 我正在使用VisualStudio2010SP1。 请让我知道我做错了什么。 这是相关代码 private List<List<Rectangle>> m_aRectWBLD = ne

我是新来C#的,所以请容忍我

我需要使用列表或矩形的列表。 我的问题是,每当我为一个元素设置值时,其他元素也会被设置

例如,如果我的列表是“m_aRectWBLD”,大小为2 x 4, 当我设置“m_aRectWBLD[0][0]”时,也会设置“m_aRectWBLD[1][0]”

我正在使用VisualStudio2010SP1。 请让我知道我做错了什么。 这是相关代码

    private List<List<Rectangle>> m_aRectWBLD = new List<List<Rectangle>>();
    static readonly Rectangle m_Rectdef = new Rectangle(0, 0, 0, 0);

    private void ResetAllData()
    {
        List<Rectangle> aRectZero = new List<Rectangle>();

        for (int i = 0; i != 4; i++)
            aRectZero.Add(m_Rectdef);

        m_aRectWBLD.Clear();                

        for (int i = 0; i != 2; i++)
        {
            m_aRectWBLD.Add(aRectZero);
        }

        m_aRectWBLD[0][0] = new Rectangle(0, 0, 100, 100);    // after doing this both
                                                              // m_aRectWBLD[0][0] and
                                                              // m_aRectWBLD[1][0]
                                                              // have the same Rectangle value

    }
private List m_aRectWBLD=new List();
静态只读矩形m_Rectdef=新矩形(0,0,0,0);
私有void ResetAllData()
{
List aRectZero=新列表();
for(int i=0;i!=4;i++)
aRectZero.Add(m_Rectdef);
m_aRectWBLD.Clear();
对于(int i=0;i!=2;i++)
{
m_aRectWBLD.Add(aRectZero);
}
m_aRectWBLD[0][0]=新矩形(0,0,100,100);//完成这两项操作后
//m_aRectWBLD[0][0]和
//m_aRectWBLD[1][0]
//具有相同的矩形值
}
多谢各位

private List<Rectangle> generateRectList()
{
    var aRectZero = new List<Rectangle>();
    for (int i = 0; i < 4; i++)
        aRectZero.Add(m_Rectdef);

    return aRectZero;
}

private void ResetAllData()
{        
    m_aRectWBLD.Clear();

    for (int i = 0; i < 2; i++)
    {
        m_aRectWBLD.Add(generateRectList());
    }

    m_aRectWBLD[0][0] = new Rectangle(0, 0, 100, 100);
}
您需要做的是为每个职位创建一个新的列表。我所做的更改为每个插槽创建了一个新的、单独的
列表。然后可以单独修改列表

如果您希望进一步说服自己,请将相同(非
只读)
矩形
分配到列表的两个位置,并尝试修改其中一个位置。它将修改另一个

其他要点:
  • 在for循环中使用小于/大于谓词更为常见(首选i>x而不是i!=x)
  • m_VARNAME在C#中不太常见,更喜欢小写的局部/私有变量/函数

为什么要将您的
m_Rectdef
声明为
静态只读
?看起来矩形是一种引用类型,您正在向每个列表元素添加相同的矩形实例-如果它是一个结构,这可能会起作用,但不是,您想做什么?@Charleh是的,这就是答案。不,谢谢,我不希望这是一个重复的,所以-也许如果OP可以澄清他们的意图,我们可以给他们一个正确的方向推动你好,谢谢你的回复。我试图做的是用默认的矩形值(0,0,0,0)初始化矩形列表。然后,在程序中的某个时刻,每个矩形都会得到更新。我来自C++背景,所以我只会使用向量。谢谢你的评论,他们很有帮助。非常感谢!!这正是我所希望的答案。现在问题解决了。也谢谢你的风格相关的建议。
m_aRectWBLD[0] // List x
m_aRectWBLD[1] // List x