1. goto 语句范围内没有“aaaa”这样的标签
2. 这个标签尚未被引用无奈用goto,goto 还不让我用!都在如下方法里用的
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
{
    if()
    {
        aaaa:
        ...
    }
    else
    {
        if()
        {
            ...
        }
        else
        {
            goto aaaa;
        }
    }
}
这样使用错了吗?(反正报了上2条错),还是c#有使用上的设置?

解决方案 »

  1.   

    csdn 把我排好的版面全给弄乱了,唉!
      

  2.   

    你就不能把aaaa:下面的代码写成函数调用?
      

  3.   

    {}号是语句块,临时变量和标签都不能越界...ps:如果你不是高手不要用goto,我不是高手我就不用...
      

  4.   

    另外...if else等语句本身就有语句块限定,写不写{}都不能越界...
      

  5.   

    goto 不应该是 无条件转移 吗?
      

  6.   

    C# 语法限制,goto可以在 自己的block里跳来跳去,也可以跳出block,但不允许跳进别的block里面去。你的这种情况明显就是属于从一个 else  block 跳进另外一个 if block的情况,被禁止的。
    参见CSharp Language Specification.doc  8.9.3 小节
      

  7.   

    世上没有绝对的自由...再“无条件”也有可访问范围的界限...所有语句、变量都只能在作用域内有效,goto语句也不例外...它只能跳转到本语句块和上层可访问的范围内...
      

  8.   

    偶尔用用goto还是能美化代码简化逻辑的...
    扯不上高手不高手.ps:我一般只往前跳不往后跳.
      

  9.   

    感谢楼上的朋友的热情指正.我以为WINDOWS的安全机制还允许在同一个FORM里goto呢,呵呵.结帖.
      

  10.   

    再次重申,如果你不是能非常明确地控制代码的高手不要随便用goto...在C#中,goto语句通常只用于传递switch-case标签和跳出深嵌套循环...你这样用是很危险的,很容易死循环...
      

  11.   

    没有.上学时,老师一再强调不许用goto的.我现在写的代码太大了,这里涉及到form间传值问题:
    form1干活,用户选中一行,打开form2;
    form2干完活,把值传给form1,而这时,当用户再点其他行的时候(对应的数据内被form2处理过),则重新打开form2处理其数据,处理完毕后再传值给form1并显示出来
    业务就是这些.希望大家指点指正.
      

  12.   

    我现在写的代码太大了,这里涉及到form间传值问题:
    form1干活,用户选中一行,打开form2;
    form2干完活,把值传给form1,而这时,当用户再点其他行的时候(对应的数据内 没 被form2处理过, 若处理过则显示出来),则重新打开form2处理其数据,处理完毕后再传值给form1并显示出来
    业务就是这些.希望大家指点指正.
      

  13.   

    goto 是不可以穿越语句块的