Рекурсивная функция внутри метода - C#
Формулировка задачи:
Помогите переделать
В общем, как переписать код более логично? Ну то есть мне надо, чтобы никогда ошибка не появлялась. Тут она появляется, редко...А нужно, чтобы вообще никогда.
private void Move_Click(object sender, EventArgs e)
{
foreach (GraphObject elem in elements)
{
if (elem.Selected)
{
Random r = new Random();
try
{
elem.X = r.Next(panel1.Width);
}
catch (ArgumentException)
{
elem.X = r.Next(panel1.Width);
}
try
{
elem.Y = r.Next(panel1.Height);
}
catch (ArgumentException)
{
elem.Y = r.Next(panel1.Height);
}
}
panel1.Invalidate();
}
}
Я их вынесла в отдельные ф-ии. Более логично нельзя?
private void GenerateMove(GraphObject el)
{
Random r = new Random();
try
{
el.X = r.Next(panel1.Width);
el.Y = r.Next(panel1.Width);
}
catch (ArgumentException)
{
GenerateMove(el);
}
}
private void Move_Click(object sender, EventArgs e)
{
foreach (GraphObject elem in elements)
{
if (elem.Selected)
{
GenerateMove(elem);
}
panel1.Invalidate();
}
}Решение задачи: «Рекурсивная функция внутри метода»
textual
Листинг программы
private void Move_Click(object sender, EventArgs e)
{
Random r = new Random();
foreach (GraphObject elem in elements)
{
if (elem.Selected)
{
for(;;)
{
try { elem.X = r.Next(panel1.Width); break; }
catch (ArgumentException) { }
}
for(;;)
{
try { elem.Y = r.Next(panel1.Height); break; }
catch (ArgumentException) { }
}
}
panel1.Invalidate();
}
}