下面是两个数字相加的代码。我要求用户输入并在函数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;
}
}
答案 0 :(得分:1)
我通常尝试将UI代码与业务逻辑代码分开,这意味着在大多数情况下,在大多数方法中,我没有对Console.ReadLine
或Console.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");
对于不同类型,我也有类似的方法,因此不必担心主代码中的数据验证。