C#传递具有可选默认值的整数变量

问题描述 投票:1回答:4
    class Program
{
    static void Main(string[] args)
    {
        WriteLine("What is the radius of your circle: ");
        WriteLine("The area of your circle is: " + circleArea(Double.Parse(ReadLine())).ToString());
        ReadKey();
   }
    static double circleArea(double radius = 5.00)
    {            
        return Math.PI * (radius * radius);
    }
    }

我以为我设置正确;但是,我收到System.FormatException错误:'输入字符串的格式不正确。没有输入任何值时,在WriteLine("The area of your circle is: " + circleArea(Double.Parse(ReadLine())).ToString());行上。我希望它的默认值为2。谢谢。

c# default optional
4个回答
1
投票

您的问题是您需要分解转换以能够测试不良的输入条件。看一下这段代码。

            Console.WriteLine("What is the radius of your circle: ");
        var isNumber = Double.TryParse(Console.ReadLine(), out double number);
        if (!isNumber)
            number = 0;
        Console.WriteLine("The area of your circle is: " + circleArea(number).ToString());
        Console.ReadKey();

这将测试一个合法的数字,如果不是,它将仅传递零作为数字。


0
投票
如果输入的形式不是有效的double形式,

Double.Parse()将始终引发FormatException。

默认参数值的行为是,在调用方法时省略参数将导致它改为使用默认值(这是通过在编译时将默认值插入到方法调用中来完成的)。没有任何语言行为可以将无效值自动替换为某些默认值。

在您的情况下,您需要抢占要进入Double.Parse()的空值。像这样的东西:

class Program
{
    static void Main(string[] args)
    {
        WriteLine("What is the radius of your circle: ");

        var input = ReadLine();

        if (!double.TryParse(input, out var value))
            WriteLine($"Invalid input received: {value}");
        else
            WriteLine("The area of your circle is: " + circleArea(value).ToString());

        ReadKey();
    }
    static double circleArea(double radius = 5.00)
    {            
        return Math.PI * (radius * radius);
    }
}

0
投票

我强烈建议分两步进行阅读和计算

class Program
{
    static void Main(string[] args)
    {
        WriteLine("What is the radius of your circle: ");
        var input = ReadLine();
        double d = 0.0; //default value here
        Double.TryParse(input,out d);
        WriteLine("The area of your circle is: " + circleArea(d).ToString());
        ReadKey();
   }

}


0
投票

这是一种简洁的测试输入的方法,如果输入的任何内容的格式不正确,也可以选择默认值。

        Console.Write("What is the radius of your circle: ");
        var value = double.TryParse(Console.ReadLine(), out var input) ? input : 2d;
        Console.WriteLine($"The area of your circle is {circleArea(value)}");
© www.soinside.com 2019 - 2024. All rights reserved.