如何将验证从输入拆分为两个单独的方法?

时间:2017-05-02 15:07:40

标签: c#

我有以下方法,我想将输入部分与验证部分分开,即我想在一个方法(ReadInput)中读取输入并断言输入值的类型为{{ 1}}在另一种方法(double)中。我怎么能这样做?

AssertIsDouble

我尝试了以下但是没有用:

public static double ReadInput()
{
    double number = 0;

    while (true)
    {

        if (Double.TryParse(Console.ReadLine(), out number) && number > 0)
        {
            return number;
        }
        else
        {
            Console.WriteLine("Please, input a number greater than zero (0).");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我使用out参数并从bool方法返回Assert

免责声明:代码未经测试但应该有效。

public static double ReadInput()
{
    double number;

    while (!AssertIsDouble(Console.ReadLine(), out number))
    {
        Console.WriteLine("Please, input a number greater than zero (0).");
    }

    return number;
}

public bool AssertIsDouble(string input, out double number)
{
    return (Double.TryParse(input, out number) && number > 0);
}

请注意,如果我是你,我也会重命名这些方法,因为它们目前有点不清楚:

  • ReadInput:请阅读什么输入?
  • AssertIsDouble:这个名字不错,但也会进行额外的检查。

另请注意原始代码的问题是此循环:

while (true)
{
    AssertIsDouble(Console.ReadLine());
}

你永远不会检查/分配方法调用的返回值,也永远不会设置一个突破循环的条件,因此你有一个无限循环。

答案 1 :(得分:1)

我通常从用户那里获得强类型(非字符串)输入的做法是使用一个单独的方法来提示显示给用户,如果输入的值不正确则显示错误提示,以及输入允许的最小/最大值。这极大地简化了主代码体:

private static double GetDoubleFromUser(
    string prompt = "Please enter a number: ",
    string errorPrompt = " - Error: input must be a number between {0} and {1}: ",
    double minValue = double.MinValue, double maxValue = double.MaxValue)
{
    double value;

    // Write the prompt text and get input from user
    if (prompt != null) Console.Write(prompt, minValue, maxValue);

    while (!double.TryParse(Console.ReadLine(), out value)
            || value < minValue || value > maxValue)
    {
        // If input can't be converted to a double or is out of range, keep trying
        if (errorPrompt != null) Console.Write(errorPrompt, minValue, maxValue);
    }

    // Return converted input value
    return value;
}

现在,在您的主体代码中,您可以执行以下操作:

double input = GetDoubleFromUser("Please input the amount: ", 
    "- input must be a number greater than zero: ", 0);

Console.WriteLine($"You entered: {input}");

该方法处理剩下的事情:

enter image description here