使用计数器C#在if else循环中断

时间:2013-01-17 11:39:21

标签: c# .net

我有一个像下面的逻辑,我有一个计数器

if(condition1 == true)
{
           // do something

    if (counter==1)
    { 
        // break and go to last else statement
    }


}

else if (condition2==true)
{ 
    if (counter == 2)
    { 
        // break and go to last else statement
    }

    // do something
}
else
{
    // do this
}

我如何在这个逻辑中使用break? 我试着把goto标签用于其他但显然它无效。我想避免切换,因为有太多的逻辑。

计数器将在第二个if if循环中为2,如果counter = 2则首先if和secong if else如果counter = 3则执行,然后如果第二个if if else则if else应该执行ans等等 -

7 个答案:

答案 0 :(得分:3)

注意:问题已更改,此答案同时不正确!

您可以更改if/else if以包含counter。那么您不需要breakgoto

if (condition1 && counter != 1)
{
    // do something
}
else if (condition2 && counter != 2)
{
    // do something
}
else
{
    // do this
} 

答案 1 :(得分:2)

使用类似

的内容
if (condition1 &&  ( counter != 1 || counter != 2 ||          .... counter!= n )
{
// do something
}
else if (condition2 && (counter != 2 || ..            || counter!= n )
{
// do something
}

and so on 
else
{
// do this
 } 

答案 2 :(得分:1)

除了break语句没有超出if条件之外,您的代码可能是 以更简单的方式重构(只是假装在第一个之后的闭合支撑,如果它只是一个错字)

if(condition1 ==true && counter != 1)
{
    do something
}
else if (condition2==true && counter != 2)
{ 
    do something
}
else
{
    do this 
}

答案 3 :(得分:1)

我怀疑你的算法可以完全重新设计,但没有更多不可能知道的背景。

与此同时,您可以将最终的else子句重构为单独的方法。您实际上不需要使用break(无论如何在if语句中无效),明智地使用else

private void MyMethod()
{
    if(condition1)
    {
        // do something

        if (counter==1)
        { 
            MyOtherMethod();
        }        
    }    
    else if (condition2)
    { 
        if (counter == 2)
        { 
            MyOtherMethod();
        }
        else
        {
            // do something
        }
    }
    else
    {
        MyOtherMethod()
    }
}

private void MyOtherMethod()
{
    // Do what was in your final else clause.
}

在您的问题编辑之前,将第一个if子句中的`do something'移动到计数器检查之前,这也可以起作用:

假设你的各种“做某事”的陈述是不同的:

if (condition1 && counter != 1)
{
    // Do something.
}
else if (condition2 && counter != 1)
{
    // Do something.
}
else
{
    // Do something else.
}

答案 4 :(得分:0)

只需将逻辑放在最后一个其他块中的单独函数中,您可以随时随地调用它。

答案 5 :(得分:0)

<强>不即可。在如此大的循环中使用breakcontinue会增加复杂性并使您的逻辑变得混乱。

如果循环变得太大,请在循环中使用一个或多个命名良好的函数调用。

答案 6 :(得分:0)

bool myCondition = false;

if(condition1 ==true)
{
    if (counter==1){myCondition = true;}

    // do something
}
else if (condition2==true)
{ 
    if (counter==1){myCondition = true;}

    // do something
}

// so on 

if(myCondition)
{
    // do this 
}