C#可以';t跳过下一个IF

本文关键字:下一个 IF 可以 | 更新日期: 2023-09-27 18:26:04

当"周四时间"=关闭<-我想跳过下一个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就会崩溃。。这就是为什么我想跳过它,如果thursdaytime=关闭

C#可以';t跳过下一个IF

我猜你想要这样的东西:

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只有在极少数情况下才是必要的——这被认为是一种糟糕的做法,因为它会导致"意大利面条代码"(即没有明确流程的代码)。因此,对于第二种情况,请使用else if

此外,我认为你的第二种情况有问题,因为这两种时间检查是互斥的。因此,该条件将始终评估为false。这可以通过在正确的地方使用副题来解决。在同一语句中混合&&||时,通常要小心。

或者,您可以重新格式化代码以降低复杂性,并避免对sqlreadclosed()(cudos到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:

对于您的具体情况:

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——这是一种糟糕的做法。

尝试使用一个布尔变量,如"skipflag"。并且避免使用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();                 
          }
}

如果是"thursdaytime=="Closed"但"today!=DayOfWeek.Thursday",则跳过第一个If,转到第二个If,这将引发异常。所以你的第一个if应该是:

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

或:

if (thursdaytime == "Closed")