更有效的输入检查方式?

时间:2015-02-13 15:05:53

标签: c# user-input

新程序员在这里!我只是想知道在下面的代码中是否有更有效的方法来检查输入?

我使用while循环与TryParse结合来查看输入是否有效。如您所见,我正在重用代码。我想用第一个用户输入做类似的事情。基本上它是一段代码,我将能够在程序中多次重复使用。

有没有办法在不重写代码的情况下提高效率?这可以在各种功能中实现吗?

namespace Calculator2
{
    class GetUserInput
    {
        public char MethodChoice;
        private string _numberOne;
        private string _numberTwo;
        public int NumberOne;
        public int NumberTwo;

        public void GetCalculationMethod()
        {
            Console.WriteLine("Welcome to calculator v.2!");
            Console.WriteLine("Please choose a method of calculation!");
            Console.WriteLine("1: Addition");
            Console.WriteLine("2: Subtraction");
            Console.Write("Your choice: ");
            MethodChoice = Console.ReadKey().KeyChar;
        }

        public void GetCalculationNumbers()
        {
            Console.Clear();
            Console.WriteLine("Please enter two numbers...");
            while (!int.TryParse(_numberOne, out NumberOne))
            {
                _numberOne = Console.ReadLine();

                if (!int.TryParse(_numberOne, out NumberTwo))
                {
                    Console.WriteLine("Invalid input, try again!");
                }
            }

            Console.WriteLine("Number two: ");
            while (!int.TryParse(_numberTwo, out NumberTwo))
            {
                _numberTwo = Console.ReadLine();

                if (!int.TryParse(_numberTwo, out NumberTwo))
                {
                    Console.WriteLine("Invalid input, try again!");
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码似乎不太正确。在TryParse()失败之前,它永远不会读取用户的输入。此外,对于相同的输入,两次调用TryParse()是一个红旗。

无论如何,消除重复代码的最明显方法是将重复的代码移动到单独的方法中,然后调用该方法。

例如:

int GetInteger(string prompt)
{
    Console.WriteLine(prompt);
    while (true)
    {
        string s = Console.ReadLine();
        int value;
        if (int.TryParse(s, out value))
            return value;
        Console.WriteLine("Invalid input, try again!");
    }
}

然后像这样使用它:

public void GetCalculationNumbers()
{
    Console.Clear();
    NumberOne = GetInteger("Please enter two numbers...");
    NumberTwo = GetInteger("Number two: ");
}

请注意,如果用户不想完成输入,您应该为用户添加取消方式。