有没有办法从其他功能访问标签? C#

问题描述

我一直在尝试使用goto创建函数,并且goto的标签方法之外。我无法将标签添加函数中,并且将标签公开会破坏所有内容。有办法解决吗?

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

public static void Main(string[] arg)
{
     start:
}
public static void ToStart()
{
    goto start;
}

解决方法

不,你不能那样做。请看一下Goto Statement in the C# Language Reference

goto标识符语句的目标是带有给定标签的带标签的语句。如果当前函数成员中不存在具有给定名称的标签,或者goto语句不在标签范围内,则会发生编译时错误。

您已经在注释和其他答案中得到了一些建议。

在一种方法中,您主要要依赖结构化流控制ifwhileforswitch等。很少使用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,它将goto直接插入DoStuff的中间并继续调用Console.WriteLine(text);-但是,值是多少? 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,则可能做错了什么。总是有一种避免它的方法。

问题是,Main标签后面的start:中有什么?然后我们建议适当重写。

,

为什么不使用函数?

goto:很少使用,可能用于嵌套循环,或者嵌套if

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...