Прежде всего, да, вы можете позвонить Main
. Обратите внимание, что в вашем примере вам не хватает параметров args
(которые будут иметь аргументы командной строки). Кроме того, также знайте, что Main
возвращает, а затем выполнение продолжается после того, как вы его вызвали. Кроме того, вы, скорее всего, получите переполнение стека. Если я правильно помню, современные версии JIT могут оптимизировать хвостовую рекурсию, но я не верю, что они делают для этого конкретного случая.
Об этом объяснении цикла для новичков на уровне... это бесконечный цикл, он будет работать вечно:
while(true)
{
// ...
}
Вы можете выйти из цикла с помощью break
while(true)
{
// ...
if (something)
{
break;
}
// ...
}
Или вы можете изменить это true
дляусловие:
while(!something)
{
// ...
}
Идея заключалась бы в том, чтобы обернуть Main
в цикл, чтобы он продолжал работать, пока не будет выполнено условие. Вы можете иметь другой метод и вызывать его в цикле, например:
public static bool Execute()
{
if (something)
{
// do whatever
return true;
}
return false;
}
public static void Main(string[] args)
{
while (!Execute())
{
// Empty
}
}
Есть, конечно, другие циклы, кроме цикла while , они do ... while loop , для loop и foreach loop .
Goto будет работать? Можно утверждать. Идея состоит в том, что вы можете использовать goto для управления потоком выполнения в методе. То есть:
label:
// ...
goto label;
Приведенный выше код представляет собой бесконечный цикл. Вы можете, конечно, ввести условие:
label:
// ...
if (!something)
{
goto label;
}
// ...
Оператор while может сделать - иногда с помощью переменной - все, что вы можете сделать с помощью goto, и обычно он легче читается и менее подвержен ошибкам.
Перезапустить процесс немного сложнее, вам нужно использовать Process.Start для запуска собственного исполняемого файла. См. Каков наилучший способ получить путь к исполняемому файлу в .NET? .