C# 传递具有可选默认值的整数变量
C# Pass an integer variable with an optional default value
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。谢谢。
如果输入不是有效双精度形式,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);
}
}
我强烈建议分两步进行读取和计算
class Program
{
static void Main(string[] args)
{
WriteLine("What is the radius of your circle: ");
var input = ReadLine();
double d = 0.0;
if(!Double.TryParse(input,out d)) {
d = //default value here
}
WriteLine("The area of your circle is: " + circleArea(d).ToString());
ReadKey();
}
}
您的问题是您需要拆分转换以便能够测试错误的输入条件。看看这段代码。
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();
这将测试一个合法的数字,如果不是,它只是传递零作为数字。
如果输入的格式不正确,这是测试输入和选择默认值的简明方法。
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)}");
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。谢谢。
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);
}
}
我强烈建议分两步进行读取和计算
class Program
{
static void Main(string[] args)
{
WriteLine("What is the radius of your circle: ");
var input = ReadLine();
double d = 0.0;
if(!Double.TryParse(input,out d)) {
d = //default value here
}
WriteLine("The area of your circle is: " + circleArea(d).ToString());
ReadKey();
}
}
您的问题是您需要拆分转换以便能够测试错误的输入条件。看看这段代码。
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();
这将测试一个合法的数字,如果不是,它只是传递零作为数字。
如果输入的格式不正确,这是测试输入和选择默认值的简明方法。
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)}");