控制台写行的自定义方法和为变量赋值 - C#

Sko*_*app 1 c#

我做了一个自定义方法来打印行,然后读取用户输入以将其分配给double变量这里是我的代码:

 double result = 0;
 double a, b;
 while (true)
            {


                if (Double.TryParse(GetValue("Enter value for a "), out a)
                    && Double.TryParse(GetValue("Enter value for b "), out b))
                {
                    result = a + b;
                    break;
                }
                else
                {
                    Console.WriteLine("invalid value please try again..");
                    continue;
                }
}
       public static double GetValue(string input )
        {
            double z1;
            double value;

                Console.WriteLine(input);
                value = Console.ReadLine();
                z1 = value;
                return z1;
          }
Run Code Online (Sandbox Code Playgroud)

但面临一个错误,即我无法将'double'转换为'string'.有人能解释一下我做错了什么吗?

Gol*_*rol 5

问题就在于此

value = Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

但你可能已经知道了.ReadLine返回一个字符串.

最简单的解决方法是从GetValue返回一个字符串,因为你已经尝试在函数之外解析它:

public static string GetValue(string input )
{
    Console.WriteLine(input);
    return Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

但是一个可以说更清晰的解决方案是在函数中解决它,它会询问输入并从那里返回一个double:

double result;
double a, b;

a = GetValue("Enter value for a ");
b = GetValue("Enter value for b ");
result = a + b;

public static double GetValue(string input )
{
    double value;
    Console.WriteLine(input);

    while (!Double.TryParse(Console.ReadLine(), out value)) 
    {
        Console.WriteLine("invalid value please try again..");
    }

    return value;
}
Run Code Online (Sandbox Code Playgroud)

我认为这稍微好一点的原因是因为你将解析的逻辑隔离到函数中,所以你只需要调用一次double.TryParse.此外,如果有人为b键入一个不正确的值,在你的代码中他们需要重新开始使用a的值,在我的代码中,他们只需要重试b.