当“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会崩溃..这就是为什么我想跳过它,如果星期四=关闭
答案 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")