读取用户输入时的CS0029

问题描述

我正在尝试编写计算器,但出现错误CS0029。 这是代码

using System;

namespace Calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Calculator\n");

            Rechnungplus();
        }

        static void Rechnungplus()
        {
            Console.WriteLine("after typing a/(every) number press enter.");
            double a = Console.ReadLine();
            double b = Console.ReadLine();
            double c = a + b;
            Console.WriteLine($"\n{a} + {b} = {c}");
        }
    }
}

搜索一个解决方案,但发现一个有类似问题的人提出了一个问题。有人说他/她应该尝试:

double a = (Console.ReadLine());

但这没用。

解决方法

Console.ReadLine返回一个string,而不是double,因此您需要 将其转换为一个。选项之一是:

double a = double.Parse(Console.ReadLine());

但是,如果无法解析字符串,则会抛出异常。不过,更安全的方法是使用Double.TryParse,如果转换成功,它会返回一个布尔标记。例如:

double a;
while(double.TryParse(Console.ReadLine(),out a))
{
    Console.WriteLine("Please enter a number:");
}
,

Console.Readline()返回一个字符串。如果您想要double,则必须对其进行解析。例如:

double a = Double.Parse(Console.Readline());
double b = Double.Parse(Console.Readline());
,

Console.ReadLine返回一个string。无法将其直接转换为double。您应该使用double.Parse(),它可以将string解析为double。一个例子:

double d = double.Parse(Console.ReadLine());

请注意,如果您将double.Parse传递为无效值,则会throw an exception。更安全的选择是double.TryParse

,

Console.Readline()方法返回字符串。您必须先将其转换为double才能启动程序。

执行此操作:

double a = Convert.ToDouble(Console.ReadLine())
double b = Convert.ToDouble(Console.ReadLine())

或者更好。

static void Rechnungplus()
{
    string temp;
    bool isValid;
    double a = 0,b = 0,c = 0;
    Console.WriteLine("after typing a/(every) number press enter.");

    isValid = false;
    while (!isValid)
    {
        temp = Console.ReadLine();
        if(double.TryParse(temp,out a))
        {
            isValid = true;
        }
        else
        {
            Console.WriteLine("Invalid input. Only (decimal) numbers are allowed.");
        }
    }

    isValid = false;
    while (!isValid)
    {
        temp = Console.ReadLine();
        if (double.TryParse(temp,out b))
        {
            isValid = true;
        }
        else
        {
            Console.WriteLine("Invalid input. Only (decimal) numbers are allowed.");
        }
    }

    c = a + b;

    Console.WriteLine($"\n{a} + {b} = {c}");
}