Как вырваться из утверждения IF
У меня такой код:
public void Method()
{
if(something)
{
//some code
if(something2)
{
now I should break from ifs and go to te code outside ifs
}
return;
}
// The code i want to go if the second if is true
}
Я хочу знать, есть ли возможность перейти к этому коду после ifs без использования инструкции goto или извлечения остальной части кода другому методу.
Update:
Да, я знаю Else;)
Но этот код длинный и должен быть запущен, если первый IF является ложным и когда первый IF равен true, а второй - false.
поэтому метод извлечения я считаю лучшей идеей
Ответы
Ответ 1
Чтобы ответить на ваш вопрос:
public void Method()
{
while(true){
if(something)
{
//some code
if(something2)
{
break;
}
return;
}
break;
}
// The code i want to go if the second if is true
}
Ответ 2
Используйте else
:
if(something)
{
//some code
if(something2)
{
// now I should break from ifs and go to te code outside ifs
}
else return;
}
// The code i want to go if the second if is true
Ответ 3
Вы можете использовать goto, чтобы пропустить какой-то код. В этом примере, если thing1 имеет значение true, тогда проверка вещей2 обойдена.
if (something) {
do_stuff();
if (thing1) {
do_thing1();
goto SkipToEnd;
}
if (thing2) {
do_thing2();
}
SkipToEnd:
do_thing3();
}
Ответ 4
Это вариант того, что я узнал несколько лет назад. По-видимому, это популярно среди разработчиков C++.
Прежде всего, я думаю, я знаю, почему вы хотите вырваться из блоков IF. Для меня, мне не нравится куча вложенных блоков, потому что 1) код выглядит беспорядочно и 2) его можно поддерживать, если вам нужно перемещать логику.
Рассмотрим вместо этого цикл do/while
while:
public void Method()
{
bool something = true, something2 = false;
do
{
if (!something) break;
if (something2) break;
} while (false);
}
Цикл do/while
while гарантированно выполняется только один раз, как блок IF, благодаря жестко закодированному false
условию. Если вы хотите выйти рано, просто break
.
Ответ 5
public void Method()
{
if(something)
{
//some code
if(something2)
{
// now I should break from ifs and go to te code outside ifs
goto done;
}
return;
}
// The code i want to go if the second if is true
done: // etc.
}
тот же вопрос
длинный ответ
Ответ 6
В этом случае вставьте один else
:
public void Method()
{
if(something)
{
// some code
if(something2)
{
// now I should break from ifs and go to te code outside ifs
}
else return;
}
// The code i want to go if the second if is true
}
Как правило: в последовательности if/else
нет break
, просто упорядочите свой код в предложениях if / if else / else
.
Ответ 7
public void Method()
{
if(something)
{
//some code
if(!something2)
{
return;
}
}
// The code i want to go if the second if is true
}
Ответ 8
public void Method()
{
if(something)
{
//some code
if(something2)
{
// The code i want to go if the second if is true
}
return;
}
}
Ответ 9
Вы можете return
, только если !something2
или использовать else return
:
public void Method()
{
if(something)
{
//some code
if(something2)
{
//now I should break from ifs and go to te code outside ifs
}
if(!something2) // or else
return;
}
// The code i want to go if the second if is true
}
Ответ 10
Я думаю, я знаю, почему люди хотят этого. Msgstr "Запустить вещи, если все условия выполняются, иначе запустить другие вещи". И условия слишком сложны, чтобы их можно было объединить, if
.
Просто используйте лямбду!
if (new Func<bool>(() =>
{
if (something1)
{
if (something2)
{
return true;
}
}
return false;
})())
{
//do stuff
}
Ответ 11
Попробуйте добавить управляющую переменную:
public void Method()
{
bool doSomethingElse = true;
if(something)
{
//some code
if(!something2)
{
doSomethingElse = false;
}
}
if(doSomethingElse)
{
// The code i want to go if the second if is true
}
}
Ответ 12
Другой способ, начиная с c # 7.0, - использовать локальные функции. Вы можете назвать локальную функцию значимым именем и вызвать ее непосредственно перед объявлением (для ясности). Вот ваш пример переписан:
public void Method()
{
// Some code here
bool something = true, something2 = true;
DoSomething();
void DoSomething()
{
if (something)
{
//some code
if (something2)
{
// now I should break from ifs and go to te code outside ifs
return;
}
return;
}
}
// The code i want to go if the second if is true
// More code here
}
Ответ 13
просто хочу добавить еще один вариант, чтобы обновить этот замечательный список "как". Тем не менее, это может быть действительно полезно в более сложных случаях:
try {
if (something)
{
//some code
if (something2)
{
throw new Exception("Weird-01.");
// now You will go to the catch statement
}
if (something3)
{
throw new Exception("Weird-02.");
// now You will go to the catch statement
}
//some code
return;
}
}
catch (Exception ex)
{
Console.WriteLine(ex); // you will get your Weird-01 or Weird-02 here
}
// The code i want to go if the second or third if is true