对于我的新项目,我希望我的代码为列表中存在的每个项目创建一个新的矩形。
鉴于列表"粒子" 。 我想做像
这样的事情foreach(Rectangle rec in particles){
Rectangle r2 = new Rectangle(10, 10, 10, 10);
particles.add(r2);
}
问题是,我需要定义一个名称。如果我不知道,当代码执行时,列表粒子中会有多少个矩形,我不能这样做(我希望你明白我的意思)。我需要的是像一个函数,它创建一个名为r3或r4或r5(...)的新矩形,只要有新的矩形。我真的不知道怎么做。你能救我吗?
答案 0 :(得分:1)
您不必增加变量名称,只需将矩形按原样添加到集合中,然后索引就成为引用。即particles.get(0)将是你的r0矩形,依此类推。
如果您绝对需要'普通英语'参考,请使用地图并将密钥设置为字符串,例如“r”+ indexNumber,即r0,r1,r2..etc。然后,该键的值是您在该循环中创建的实际矩形对象。
答案 1 :(得分:0)
以下是MiiinimalLogic建议的使用Dictionary的示例:
private Dictionary<string, Rectangle> pRecs = new Dictionary<string, Rectangle>();
private void button1_Click(object sender, EventArgs e)
{
List<Rectangle> particles = new List<Rectangle>();
// ... assuming there are some values in "particles" ...
for (int i = 0; i < particles.Count; i++ )
{
// you can't have duplicate keys, make sure "pRecs" is empty if you are re-using it!
pRecs.Add("r" + i.ToString(), new Rectangle(10, 10, 10, 10));
}
}
private void Foo()
{
// ... access one of the rectangles "by name" from somewhere else ...
Rectangle tmp = pRecs["r2"];
}
答案 2 :(得分:0)
对于我的新项目,我希望我的代码为每个项目创建一个新的矩形 列表中存在一个。
您现有的代码无法正常工作,因为您在迭代时尝试修改列表。
如果您需要像粒子列表这样的新列表,可以这样做
var newParticles = new List<Rectangle>();
foreach(Rectangle rec in particles)
{
Rectangle r = new Rectangle(10, 10, 10, 10);
newParticles.add(r);
}
如果您需要在粒子列表中创建新的矩形,则创建新对象(比如粒子)并定义2个属性,如ExistingParticle,NewParticle,然后
foreach(Rectangle rec in particles)
{
Rectangle r = new Rectangle(10, 10, 10, 10);
rec.NewParticle=r;
}