C#不能跳过下一个IF

时间:2014-10-09 08:00:16

标签: c#

当“thursdaytime”=已关闭< - 我希望它跳过下一个IF 无法让“goto”工作。 有时“星期四”是07:30-16:30< - 然后下一个IF就可以了

if (today == DayOfWeek.Thursday && thursdaytime == "Closed") 
{
    sqlreadclosed(); 
    goto Ended;
}
if (today == DayOfWeek.Thursday && DateTime.Now.TimeOfDay > System.TimeSpan.Parse(thursdaytime.Substring(6, 5)) || DateTime.Now.TimeOfDay < System.TimeSpan.Parse(thursdaytime.Substring(0, 5)))
{
    sqlreadclosed();              
}
else
{
    sqlreadopen();                 
}
    Ended:

任何人都可以在这里帮助我..我是C#的初学者:) 如果它的帮助,重点是,如果时钟在07:30或16:30以下,转到sqlreadclosed()并且它工作得很好。但是当星期四是“关闭”时,不合格的IF会崩溃..这就是为什么我想跳过它,如果星期四=关闭

4 个答案:

答案 0 :(得分:2)

猜猜你想要这样的东西:

if (today == DayOfWeek.Thursday && thursdaytime == "Closed") 
{
    sqlreadclosed(); 
    //goto Ended;
}
else if (
    today == DayOfWeek.Thursday 
    && (
        DateTime.Now.TimeOfDay > System.TimeSpan.Parse(thursdaytime.Substring(6, 5)) 
        || DateTime.Now.TimeOfDay < System.TimeSpan.Parse(thursdaytime.Substring(0, 5))
    )
)
{
    sqlreadclosed();              
}
else
{
    sqlreadopen();                 
}
//Ended:

一般来说,在C#中使用goto只是在极少数情况下才需要它被认为是不好的做法,因为它会导致&#34;意大利面条代码&#34; (即没有明确流程的代码)。因此,请使用else if作为您的第二个条件。

此外,我认为你的第二个条件有问题,因为这两个时间检查是相互排斥的。因此,条件将始终评估为false。这可以通过在正确的位置使用parantheses来解决。在同一语句中混合使用&&||时,请务必小心。

或者,您可以重新格式化代码以降低复杂性并避免两次调用sqlreadclosed()cudos to PJ_pavel):

if (today == DayOfWeek.Thursday) 
{
    if (
        thursdaytime == "Closed" 
        && (
            DateTime.Now.TimeOfDay > System.TimeSpan.Parse(thursdaytime.Substring(6, 5)) 
            || DateTime.Now.TimeOfDay < System.TimeSpan.Parse(thursdaytime.Substring(0, 5))
        )
    )
    {
        sqlreadclosed();              
    }
    else
    {
        sqlreadopen();                 
    }
    //Ended:

答案 1 :(得分:1)

针对您的具体情况:

if (today == DayOfWeek.Thursday) {
   if(thursdaytime == "Closed" || (DateTime.Now.TimeOfDay > System.TimeSpan.Parse(thursdaytime.Substring(6, 5)) || DateTime.Now.TimeOfDay < System.TimeSpan.Parse(thursdaytime.Substring(0, 5)))){
     sqlreadclosed(); 
   else{
     sqlreadopen(); 
   }
}

但正如大家在评论中所说:试着阅读更多有关条件语句使用的内容并且不使用GOTO - 这是一种不好的做法。

答案 2 :(得分:0)

尝试使用一个类似于&#39; skipflag&#39;的布尔变量。并且避免使用goto语句,这被认为是不好的做法。 Goto使代码变得复杂且难以阅读。

     if (today == DayOfWeek.Thursday && thursdaytime == "Closed") 
          {
          sqlreadclosed(); 
          skipflag = false;
          }
     else{
          skipflag = true;
     }
 if(skipflag)
{
     if (today == DayOfWeek.Thursday && DateTime.Now.TimeOfDay > System.TimeSpan.Parse(thursdaytime.Substring(6, 5)) || DateTime.Now.TimeOfDay < System.TimeSpan.Parse(thursdaytime.Substring(0, 5)))
          {
          sqlreadclosed();              
          }
          Else
          {
          sqlreadopen();                 
          }
}

答案 3 :(得分:0)

如果它&#34; thursdaytime ==&#34;关闭&#34;&#34;但&#34;今天!= DayOfWeek.Thursday&#34;然后它跳过第一个if并转到第二个将引发异常。所以你的第一个应该是:

if (today == DayOfWeek.Thursday || thursdaytime == "Closed") 

或:

if (thursdaytime == "Closed")