用什么代替“goto”-method?

时间:2015-02-19 21:27:34

标签: c#

我对编程很新,而且我已经意识到人们不喜欢不喜欢" goto" -methods。我想知道如何编写允许用户决定输入多少条目的代码?例如,在下面的代码中,用户输入一个名称,然后询问他/她是否想要输入另一个名字。我怎么能这样做而不必使用go-to方法?

public class GoToTest
{
    public static void Main()
    {
        InputName:
        string name;
        Console.Write("Input name: ");
        name = Console.ReadLine();

        string decision;
        Console.WriteLine(""); //Empty line for increased readability
        Console.WriteLine("Would you like to input another name? Yes - No");
        decision = Console.ReadLine();
        if (decision == "Yes")
        {
            goto InputName;
        }
        else
        {
            Console.WriteLine("Name is " + name);
        }
    }
}

3 个答案:

答案 0 :(得分:5)

执行此操作的一个好模式是在满足特定条件时中断的“无限”循环:

while (true) {
 var input = GetInputFromConsole();
 if (input == "exit")
  break;
}

while循环的结束括号几乎是一个转到顶部。然而,这比goto更好,因为循环为变量和视觉缩进提供了范围。它更容易理解。

答案 1 :(得分:1)

我一般都不喜欢(真实),所以我不得不给出这个答案。

do
{
    string name = GetName();
    Console.WriteLine("Would you like to input another name? (Y)es - (N)o");
}while(Console.ReadLine().ToUpper().StartsWith("Y"));

和GetName可能如下所示。

string GetName()
{
    Console.Write("Input name: ");
    return Console.ReadLine();
}

答案 2 :(得分:0)

您可以通过检查退出条件使其更加整洁:

string decision = "y";
while (decision == "y")
{
    string name;
    Console.Write("Input name: ");
    name = Console.ReadLine();
    Console.WriteLine("Name is " + name);
    Console.Write("\nWould you like to input another name? y/n: ");
    decision = Console.ReadLine().ToLower();
}

(字符串中的\n为您提供一个新行。)

或者你可以让用户在完成输入名字后单独输入后,让用户更轻松:

string name = "x"; // anything except an empty string
Console.WriteLine("Enter a blank line to finish...");
while (!string.IsNullOrWhiteSpace(name))
{
    Console.Write("\nInput name: ");
    name = Console.ReadLine();
    if (!string.IsNullOrWhiteSpace(name))
    {
        Console.WriteLine("Name is " + name);
    }
}

我使用!string.IsNullOrWhiteSpace(name)以防用户决定空行表示空格或标签。