是否有方法从另一个函数访问标签?C#

是否有方法从另一个函数访问标签?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不,您不能这样做。请看一下这本

我一直在尝试创建一个带有goto的函数,而goto的标签在方法之外。我无法将标签添加到函数中,将标签公开会破坏一切。有办法解决吗

我放的代码非常小,因为它只是我想要发生的事情的一个演示:

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
几乎总是一个坏主意。它破坏了当前代码的流程,使得很难推理它是正确的。很抱歉,这是一个糟糕的问题。这是我决定创建一个帐户后,第一篇关于堆栈溢出的帖子。我一定要看你给我的链接。谢谢。这回答了你的问题吗?