是否可以从用户定义的功能中获取用户的输入?

时间:2018-12-31 20:42:25

标签: c#

下面是两个数字相加的代码。我要求用户输入并在函数GetValidateInput()中进行验证。代码可以正常工作,但是从用户定义的函数中请求用户输入是正确的方法,还是我们应该在Main()中执行此操作,并且仅验证用户定义的函数中的数据(以便可以将该函数重用于其他验证中)在其他一些地方)。什么是正确的方法?

class Solution
{
    static void Main(string[] args)
    {

        Console.WriteLine("Enter the First Number");
        int firstNumber = GetValidateInput();

        Console.WriteLine("Enter the Second Number");
        int secondNumber = GetValidateInput();

        int sum = SolveMeFirst(firstNumber, secondNumber);
        Console.WriteLine("The Sum is {0}",sum);

        Console.ReadLine();
    }

    static int SolveMeFirst(int firstNumber, int secondNumber)
    {
        return firstNumber + secondNumber;
    }


    static int GetValidateInput()
    {
        bool isValid = false;
        string number = null;
        int result;
        do
        {
            number = Console.ReadLine();
            if (int.TryParse(number, out result))
                isValid = true;
            else
                Console.WriteLine("Invalid Number, please re-enter");

        } while (!isValid);
        return result;
    }
}

1 个答案:

答案 0 :(得分:1)

我通常尝试将UI代码与业务逻辑代码分开,这意味着在大多数情况下,在大多数方法中,我没有对Console.ReadLineConsole.WriteLine的调用。 / p>

但是,如果您要通过控制台进行大量的用户交互,那么拥有一个进行输入验证的帮助程序库是必不可少的。我有一个库,其中包含与您的方法类似的方法,只有该方法会在提示时显示给用户作为参数,以便可以重用该方法。最简单的版本可能如下所示:

public static int GetIntFromUser(string prompt)
{
    int input;

    do
    {
        Console.Write(prompt);
    } while (!int.TryParse(Console.ReadLine(), out input));

    return input;
}

然后您可以这样称呼它:

int firstNumber = GetIntFromUser("Enter the First Number");
int secondNumber = GetIntFromUser("Enter the Second Number");

对于不同类型,我也有类似的方法,因此不必担心主代码中的数据验证。