C#使用TryParse遇到麻烦

时间:2019-02-26 23:27:09

标签: c# tryparse

我如何在此代码中添加TryParse,所以如果用户输入字母,它将告诉他“无效,请仅输入数字”。我尝试了几种方法,但是它破坏了我的代码。我已经尝试过forwhile循环。但是,当我确实使用它时,只用了一个数字,然后将该数字分配给了我的所有数组。

{
    const int SIZE = 2;

    double[] array = new double[SIZE];
    Console.WriteLine("Please Sir Enter 2 numbers");
    for (int i = 0; i < SIZE; i++)
    {
         array[i] = Convert.ToDouble(Console.ReadLine());
    }
    Console.WriteLine("===============================================");
    Console.WriteLine("The Values you've entered are");
    Console.WriteLine("{0}{1,8}", "index", "value");
    for (int counter = 0; counter< SIZE; counter++)
    {
         Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
    }
    Console.WriteLine("===============================================");            
    Console.ReadLine();
}

2 个答案:

答案 0 :(得分:1)

像下面这样在for循环中使用while循环:

for (int i = 0; i < SIZE; i++)
{
   string input = Console.ReadLine();
   double num = 0;
   while(!Double.TryParse(input, out num))
   {
       Console.WriteLine("Not valid, please enter numbers only");
       input = Console.ReadLine();
   }
    array[i] = num;
}

答案 1 :(得分:0)

为了从用户那里获得经过验证的输入(特别是当期望类型是字符串以外的其他类型时),我发现使用辅助方法真的很有用。

下面的方法采用一个显示给用户的字符串(输入提示),然后继续要求用户输入,直到他们输入有效的数字为止(TryParse是{{ 1}}条件。

如果要对输入进行其他限制,它还会接受一个可选的函数参数,该参数可用于验证输入。该函数定义为接受while(用户输入)并返回double(如果输入有效,则返回bool

true

要在代码中使用此代码,您只需执行以下操作:

private static double GetDoubleFromUser(string prompt, Func<double, bool> validator = null)
{
    double result;

    do
    {
        Console.Write(prompt);
    } while (!double.TryParse(Console.ReadLine(), out result) ||
             (validator != null && !validator.Invoke(result)));

    return result;
}

输出

Image of console output of code sample above


但是有时您可能希望进一步限制数量,在这种情况下,您可以将验证方法传递给函数。一种简单的方法是将函数作为lambda表达式传递。例如,以下表达式:Console.WriteLine($"Please sir, enter {SIZE} numbers"); for (int i = 0; i < SIZE; i++) { array[i] = GetDoubleFromUser($" Enter number #{i + 1}: "); } 的意思是“如果i => i > 10大于i,则返回比较结果”;换句话说,如果{{1 }},否则返回10”。

您可以像这样将其传递给我们的true方法:

i > 10

现在,当输入的数字不是数字或输入的数字不大于10时,该方法将继续循环!

输出

Image of console output of code sample above