Рекурсивная функция внутри метода - 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();
    }
}

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы