goto
最近用到一次goto语句,才发现goto语句只能在标记过的区域内部使用,比如
if(String.IsNullorAmpty(strBar))
{
//do sth...
goto Mark1; //报错
}
if(WaitThread() == true)//线程等待信号
{
//do sth... //调用第三方API过站
Mark1: Display("准备发送完成信号");
if(SendSignal() == true)
{
//xxx
}
else
{
//xxx
}
if(WaitThread2(int iOutTime) == false)//超时时间内线程2等待信号
{
goto Mark1;//正确
}
}
这个goto必须在Mark1的作用范围内才能生效。
详细的可以看一下这篇基本语法和使用:http://t.csdnimg.cn/HrfOv
第一个goto Mark1超出了Mark1的作用范围
而Mark1的作用范围在waitThread后的块语句内,包含内部的嵌套的语句。
总结
当然,冒然使用goto语句,这是业务逻辑发生了变化,以及我之前的设计思路错误。想要实现第一个goto,需要将下面的各个函数封装成新的函数然后去调用即可。不过因为函数内部业务串在一块嫌麻烦才试试goto的,这下只能去理一理业务逻辑去了,然后改一改之前设计的接口,不少东西都要改一下。