首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何制作一个有效的菜单,用户必须输入完整的选项?

如何制作一个有效的菜单,用户必须输入完整的选项?
EN

Stack Overflow用户
提问于 2018-07-17 12:51:04
回答 1查看 92关注 0票数 0

我正在做一个菜单屏幕,用户需要输入其中的一个选项。目前我正在做这个:

代码语言:javascript
运行
复制
static void Start()
    {
        Console.WriteLine("Options: " + Environment.NewLine);
        string[] options = { "Option 1", "Option 2", "Option 3" };
        foreach (string value in options)
        {
            Console.WriteLine(value);
        }
        Console.Write("Type the option you want: ");
        string choosen = Console.ReadLine();
        if(choosen == "Option 1")
        {
            Console.WriteLine(Environment.NewLine + "Your choosen option was Option 1" + Environment.NewLine);
            Start();
        }
        else if (choosen == "Option 2")
        {
            Console.WriteLine(Environment.NewLine + "Your choosen option was Option 2" + Environment.NewLine);
            Start();
        }
        else if(choosen == "Option 3")
        {
            Console.WriteLine(Environment.NewLine + "Your choosen option was Option 3" + Environment.NewLine);
            Start();
        }
        else
        {
            Console.WriteLine(Environment.NewLine + "Please choose a valid option!" + Environment.NewLine);
            Start();
        }
    }

我可以看出,这不是一个非常有效的方法,但我不知道其他方式。

我知道我可以这样做:

代码语言:javascript
运行
复制
ConsoleKeyInfo key = Console.ReadKey();
        switch (key.Key)
        {
            case ConsoleKey.D1:
                Console.WriteLine(Environment.NewLine + "Your choosen option was Option 1" + Environment.NewLine);
                Start();
                break;
            case ConsoleKey.D2:
                Console.WriteLine(Environment.NewLine + "Your choosen option was Option 2" + Environment.NewLine);
                Start();
                break;
            case ConsoleKey.D3:
                Console.WriteLine(Environment.NewLine + "Your choosen option was Option 3" + Environment.NewLine);
                Start();
                break;
            default:
                Console.WriteLine(Environment.NewLine + "Please choose a valid option!" + Environment.NewLine);
                Start();
                break;
        }

但我希望用户能够完整地编写其中的一个选项,比如“选项1”左右。这样,用户需要按下一个键。

那么,有没有一种更有效的方法来做这件事,或者为了这个确切的目的,我只能用我一直以来的方式去做?我真的不喜欢对我所拥有的每一个选项都有一个if- each语句。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 13:16:25

你可以试试这样的..。

代码语言:javascript
运行
复制
public class Option
{
    public string Description { get; }
    public string Method { get; }

    public Option(string description, string method)
    {
        Description = description;
        Method = method;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        var options = new[]
        {
            new Option("1 to print \"Hello\".", "PrintHello"),
            new Option("2 to print \"World\".", "PrintWorld")
        };

        Console.WriteLine("Please press the number of the desired option:");
        foreach (var option in options)
        {
            Console.WriteLine($"{option.Description}");
        }

        char key;

        while (true)
        {
            key = Console.ReadKey().KeyChar;
            if (key >= '1' && key <= '0' + options.Length)
            {
                break;
            }
            Console.WriteLine($"{Environment.NewLine}Please choose an option from 1 to {options.Length}");
        }

        Console.WriteLine($"{Environment.NewLine}You selected option {key}");

        var selected = options[key - '1'];

        typeof(Program).GetMethod(selected.Method).Invoke(null, null);

        // This line is just to stop the console window closing
        Console.ReadLine();
    }

    public static void PrintHello()
    {
        Console.WriteLine("Hello");
    }

    public static void PrintWorld()
    {
        Console.WriteLine("World");
    }
}

显然,这将只适用于多达9个选项。此外,如果要调用的方法不是静态的,则需要有一点不同。如果是这样的话,请告诉我,我可以再举一个例子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51381864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档