转换类C#7.0的未处理异常

时间:2017-03-27 06:58:48

标签: c# constructor io unhandled-exception c#-7.0

我在第20行收到异常错误,说用户输入的类型不正确,这就是我添加Convert类的原因。我试图根据用户的输入来读取/写入属性,以便将圆的半径作为构造函数中的参数接受。

using System;
using static System.Console;

namespace Project3
{
    public class Program
    {
        static void Main(string[] args)
        {
            Circle userCircle = new Circle();
            WriteLine("What is the radius of the circle?");
            userRadius = Convert.ToDouble(ReadLine());
            userCircle.Radius = Convert.ToDouble(ReadLine());

        GetArea();
        GetDiameter();
        GetCircumference();
    }
}

public class Circle
{
    const double pie = 3.14159;
    double area,
           circumference,
           diameter,
           userRadius;

    public double radius; //Data members
    public Circle(double radiusOfCircle) //Accepts radius of the circle as an argument
    {
        radiusOfCircle = radius;
    }

    public double Radius  //radius property set to default value of 0
    {
        get { return radius; }
        set { radius = value; }
    }

    public Circle() //default constructor 
    {

    }

    double GetArea()
    {
        area = pie * userRadius * userRadius;
        WriteLine("The Area is {0:##.##}", area);
        return area;
    }

    double GetDiameter()
    {
        diameter = userRadius * 2;
        WriteLine("The Diameter is {0:##.##}", diameter);
        return diameter;
    }

    double GetCircumference()
    {
        circumference = 2 * pie * userRadius;
        WriteLine("The Circumference is {0:##.##}", circumference);
        return circumference;
    }
}

1 个答案:

答案 0 :(得分:1)

检查用户输入时,您应该使用Double.TryParse这样的方法,而不是使用Convert.ToDouble,如果它无法转换输入,则会引发异常。

Double number;
var value = Console.ReadLine();
if (Double.TryParse(value, out number))
  Console.WriteLine(number);
else
  Console.WriteLine("{0} is outside the range of a Double.");

检查:https://msdn.microsoft.com/en-us/library/3s27fasw%28v=vs.110%29.aspx