新程序员在这里!我只是想知道在下面的代码中是否有更有效的方法来检查输入?
我使用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!");
}
}
}
}
}
答案 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: ");
}
请注意,如果用户不想完成输入,您应该为用户添加取消方式。