是否有方法从另一个函数访问标签?C#
我一直在尝试创建一个带有goto的函数,而goto的标签在方法之外。我无法将标签添加到函数中,将标签公开会破坏一切。有办法解决吗 我放的代码非常小,因为它只是我想要发生的事情的一个演示:是否有方法从另一个函数访问标签?C#,c#,function,goto,C#,Function,Goto,我一直在尝试创建一个带有goto的函数,而goto的标签在方法之外。我无法将标签添加到函数中,将标签公开会破坏一切。有办法解决吗 我放的代码非常小,因为它只是我想要发生的事情的一个演示: public static void Main(string[] arg) { start: } public static void ToStart() { goto start; } 为什么不使用函数呢 goto:很少使用,可能用于嵌套循环,或者嵌套if's不,您不能这样做。请看一下这本
public static void Main(string[] arg)
{
start:
}
public static void ToStart()
{
goto start;
}
为什么不使用函数呢
goto:很少使用,可能用于嵌套循环,或者嵌套if's不,您不能这样做。请看一下这本书 goto标识符语句的目标是具有给定标签的带标签语句。如果当前函数成员中不存在具有给定名称的标签,或者goto语句不在标签的范围内,则会发生编译时错误 你在评论和其他答案中得到了一些建议 在一种方法中,您希望主要依赖结构化流控制
if
,while
,for
,switch
,等等。很少使用goto
,但在某些情况下,它可以派上用场。但通常不是你想尝试的第一件事
要将代码分解为逻辑单元,您应该使用方法(正如您已经开始做的那样)。与其使用
goto
将控制权传递给另一个方法,不如“调用该方法”。方法比goto有很大的好处,因为它们允许您将参数和值传递回调用代码。示例调用:double z=Math.Max(x,y)
其中我调用Max
方法,该方法接受两个数值参数并返回最大值。假设您可以对另一个方法执行goto
。然后我就可以编写这段虚构的代码:
public static void ToStart()
{
goto start;
}
public static void DoStuff(int number, string text)
{
Console.WriteLine(number);
start:
Console.WriteLine(text);
}
假设如果我调用ToStart
,它将直接转到DoStuff
中间,然后继续调用Console.WriteLine(text)代码>-但是文本的值是多少?它从未被设定。这可能,也可能会很糟糕
让我们用有效的C#代码重新编写它,看看应该如何处理它
public static void ToStart()
{
DoStuffPartB("From ToStart");
}
public static void DoStuff(int number, string text)
{
Console.WriteLine(number);
DoStuffPartB(text);
}
public static void DoStuffPartB(string text)
{
Console.WriteLine(text);
}
这段代码运行得很好
底线是,如果您使用的是goto
,您可能做错了什么。(几乎)总有办法避免它
问题是start:
标签之后的Main
中有什么?然后我们可以建议适当重写。你好,请看一下这篇文章。社区要求你在这里提问之前做一些研究。在发布之前,你可以做以下几件事:1)尝试一下(这是一个很好的学习方式);2)搜索C语言参考资料或关于C语言goto的文章。这类问题很可能会被版主关闭。对任何事情使用goto
几乎总是一个坏主意。它破坏了当前代码的流程,使得很难推理它是正确的。很抱歉,这是一个糟糕的问题。这是我决定创建一个帐户后,第一篇关于堆栈溢出的帖子。我一定要看你给我的链接。谢谢。这回答了你的问题吗?