Goto на одну строку C#

92
07 января 2022, 19:30

Вот допустим есть код:

Код1

Код2

Код3

Код1 код2 и код3 выполнились.

И здесь я уже ввожу goto(код1) Но мне нужно чтобы только код1 выполнился и все остальные игнорировались. Как это сделать?

Answer 1

Если есть выбор в реализации, я предложил бы разбить Код1, Код2, Код3 по функциям и вызывать их при определённых условиях из какой-то главной функции (как написал tym32167)

Если всё таки вам нужна реализация через goto, можно добавить статическую переменную, например:

bool shouldExecuteSection = true;

И общая идея будет следущая:

Код1: // метка, куда нужно вернуться
Код1
if (shouldExecuteSection)
{
    Код2
    Код3
}
shouldExecuteSection = false;
goto(Код1);

Но всё же, настоятельно не рекомендую использовать goto, так как это делает вашу программу непредсказуемой. Если это маленькая программа, это не очень замечается, но если приложение растёт в размерах, с разными модулями - время на отладку увеличивается в разы.

Answer 2

У вас есть несколько кусков кода, и они в разных ситуациях выполняются по разному? К примеру можно вот так сделать:

public class SomeClass
{
private readonly Strategy _strategy;
public SomeClass(Strategy strategy) => _strategy = strategy;
public SomeMethod()
{
  if(_strategy.NeedCode1) Code1();
  if(_strategy.NeedCode2) Code2();
  if(_strategy.NeedCode3) Code3();
}
private void Code1()
{
//...
}
private void Code2()
{
//...
}
private void Code3()
{
//...
}
}
public class Strategy
{
  public bool NeedCode1 {get; set;}
  public bool NeedCode2 {get; set;}
  public bool NeedCode3 {get; set;}
}
static int Main()
{
   var some = new SomeClass(new Strategy{NeedCode1 = true});
   some.SomeMethod();
}

Но есть и другие решения. Всё зависит от контекста. Главное чтобы было удобно использовать, легко читать, не перегружать ответсвенностью.

READ ALSO
Не запускается приложение после клика по кнопке [закрыт]

Не запускается приложение после клика по кнопке [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

82
Quartz.NET в трехуровневой архитектуре. С#

Quartz.NET в трехуровневой архитектуре. С#

Есть класс, который унаследован от интерфейса IJobЭкемпляр этого класса у меня создается через реализацию интерфейс

76