刚开始接触编程的时候是从C语言入门,当时老师提到过goto语句的危害,后来也就一直没有用到过goto语法;直到这两天看到一份别人写的代码如下:

//部分代码

int tryCount = 3;                      //至多3次重传机会
        //Send command
tt: commPort.Write(commandByte, 0, command.Count);
DelegateState.InvokeDispatchStateEvent(BitConverter.ToString(commandByte), Color.Black);

System.Threading.Thread.Sleep(500);

//check command
byte[] buffer = new byte[500];


try
{
    commPort.Read(buffer, 0, 500);
}
catch (Exception e)
{
    tryCount--;
    if (tryCount > 0)
        goto tt;
    else
    {
        DelegateState.InvokeDispatchStateEvent("communication error", Color.Red);
        return false;
    }
}

当时看到tt: commPort.Write(commandByte, 0, command.Count); 这行竟然没看懂这个tt是什么意思。直到后面看到了goto;;当时觉得很不可思议,竟然有人还在用goto语法,于是在技术群里面与各位大神讨论了下;有人说现在高级语言完全不需要,用这个goto语句没被炒鱿鱼吗;有人说存在即合理。一番讨论后得到下面几个结论: 1.尽量不要使用goto语法,在调试的时候真的很不方便。 2.goto语句有他的便捷性,比如在多层潜逃循环中,可以使用goto语法快速跳出循环。

延伸

跨线程使用goto语句会怎样,比如下面这段代吗:

 static void Main(string[] args)
        {
           
            Task.Factory.StartNew(() => {

                Task.Delay(5000).ContinueWith((o) => {
                    goto tt;
                });
                
            });

      


            tt: DateTime dt = new DateTime(2000,01,1);
            string  s= dt.ToString("yyyyMMdd");
}

其实这段代码不会被编译通过,由此可见,goto作用范围只能是在同一个执行过程中。