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=关闭
我猜你想要这样的东西:
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")