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