2015-06-23 2 views
0

для моего нового проекта Я хочу, чтобы мой код создавал новый прямоугольник для каждого из существующих в списке.Как создать новый прямоугольник без установки имени?

Дано Список "частиц". Я хочу сделать что-то вроде

foreach(Rectangle rec in particles){ 
Rectangle r2 = new Rectangle(10, 10, 10, 10); 
particles.add(r2); 
} 

Проблема в том, что мне нужно, чтобы определить имя. Если я не знаю, сколько прямоугольников будет в списке частиц при выполнении кода, я не могу просто так сделать (надеюсь, вы понимаете, что я имею в виду). Мне нужна функция, которая создает новый прямоугольник с именем r3 или r4 или r5 (...), пока появляются новые прямоугольники. Я действительно не знаю, как это сделать. Вы можете мне помочь?

+0

почему вы хотите именно? – dotctor

+0

Не совсем понятно, чего вы пытаетесь достичь. Для чего вам нужно создавать новые переменные с именем 'r3' и т. Д., Если вы просто добавляете эти объекты в список? Вам не нужно ничего специального «имени» или переменной для прямоугольника, если вам просто нужно создать его и добавить в список - вы можете сделать это как 'particle.add (новый прямоугольник (10, 10, 10, 10)); ' –

+0

WPF? ASP.NET? WinForms? – BCdotWEB

ответ

1

Вам не нужно увеличивать имя переменной, вам просто нужно добавить прямоугольники, как в коллекцию, а затем индекс станет ссылкой. i.e particle.get (0) будет вашим прямоугольником r0 и т. д.

Если вам абсолютно нужна ссылка «простой английский», используйте карту и установите ключ как строку, такую ​​как «r» + indexNumber i.e r0, r1, r2..etc. Тогда значение для этого ключа является фактическим объектом прямоугольника, который вы создали в этом цикле.

0

Вот пример использования Dictionary, как это было предложено MiiinimalLogic:

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"]; 
    } 
0

для моего нового проекта я хочу, чтобы мой код, чтобы создать новый прямоугольник для каждого один существующий в списке.

Ваш существующий код не будет работать, поскольку вы пытаетесь изменить список при его повторении.

  1. Если вам нужен новый список, как список частиц, вы можете сделать, как этот

    var newParticles = new List<Rectangle>();  
    foreach(Rectangle rec in particles) 
    { 
        Rectangle r = new Rectangle(10, 10, 10, 10); 
        newParticles.add(r); 
    } 
    
  2. Если вам нужны новые прямоугольники, созданные в списке частиц затем создать новый объект (например Particle) и определить 2 свойства, такие как ExistingParticle, NewParticle, то

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

Quirk использования блоков кода в списках - блок кода требует 8 отступов, а не 4. Я исправил его для вас. – Jamiec

+0

Спасибо @Jamiec, мне было интересно, что происходит с форматированием. – Vikas

Смежные вопросы