如何在不设置名称的情况下创建新的Rectangle?

时间:2015-06-23 15:03:07

标签: c# list rectangles

对于我的新项目,我希望我的代码为列表中存在的每个项目创建一个新的矩形。

鉴于列表"粒子" 。 我想做像

这样的事情
foreach(Rectangle rec in particles){
Rectangle r2 = new Rectangle(10, 10, 10, 10);
particles.add(r2);
}

问题是,我需要定义一个名称。如果我不知道,当代码执行时,列表粒子中会有多少个矩形,我不能这样做(我希望你明白我的意思)。我需要的是像一个函数,它创建一个名为r3或r4或r5(...)的新矩形,只要有新的矩形。我真的不知道怎么做。你能救我吗?

3 个答案:

答案 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)

  

对于我的新项目,我希望我的代码为每个项目创建一个新的矩形   列表中存在一个。

您现有的代码无法正常工作,因为您在迭代时尝试修改列表。

  1. 如果您需要像粒子列表这样的新列表,可以这样做

    var newParticles = new List<Rectangle>();    
    foreach(Rectangle rec in particles)
    {
        Rectangle r = new Rectangle(10, 10, 10, 10);
        newParticles.add(r);
    }
    
  2. 如果您需要在粒子列表中创建新的矩形,则创建新对象(比如粒子)并定义2个属性,如ExistingParticle,NewParticle,然后

    foreach(Rectangle rec in particles)
    {
        Rectangle r = new Rectangle(10, 10, 10, 10);
        rec.NewParticle=r;
    }