如何使用C#正确地使用try-and-catch进行异常处理



我正试图在这个小代码示例中包含一个异常处理。当我被提示输入conversionType时,我试图输入字符串,这些字符串本应触发catch代码并打印出错误消息,但代码却像其他错误一样关闭了,这表明try-catch块没有捕捉到错误。我仍在学习C#中异常处理的工作原理。那么,是否有正确捕获异常并防止代码崩溃的方法呢?

static void Main(string[] args)
{
int conversionType;
double number;
Console.WriteLine("Choose the type of conversion:n" +
"1.Celsius to Fahrenheitn" +
"2.Fahrenheit to Celsius");
try
{
conversionType = Convert.ToInt32(Console.ReadLine());
if (conversionType == 1)
{
Console.WriteLine("Enter the Temperature in Celsius: ");
number = Convert.ToDouble(Console.ReadLine());
number = number * 9 / 5 + 32;
Console.WriteLine("Temperature in Fahrenheit: {0:00.0}°F", number);
}
else if (conversionType == 2)
{
Console.WriteLine("Enter the Temperature in Fahrenheit: ");
number = Convert.ToDouble(Console.ReadLine());
number = (number - 32) * 5 / 9;
Console.WriteLine("Temperature in Celsius: {0:00.0}°C", number);
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}

您不应该对此使用异常,您有像int.TryParsedouble.TryParse这样的函数,它们返回一个布尔值,表示它们是否成功。

您应该在代码末尾放一个Console.ReadLine();,以便查看异常。

此外,您可以在try语句中添加下面的代码,以确保程序能够捕获每个异常。

int conversionType;
double number;
Console.WriteLine("Choose the type of conversion:n" +
"1.Celsius to Fahrenheitn" +
"2.Fahrenheit to Celsius");

我认为您想要做的是在循环中多次使用函数。您可以捕获像这样的不同异常类型,并添加finally块。

static void Main(string[] args)
{
int conversionType;
double number;
do
{
try
{
Console.WriteLine("Choose the type of conversion:n" +
"1.Celsius to Fahrenheitn" +
"2.Fahrenheit to Celsius");
conversionType = Convert.ToInt32(Console.ReadLine());
if (conversionType == 1)
{
Console.WriteLine("Enter the Temperature in Celsius: ");
number = Convert.ToDouble(Console.ReadLine());
number = number * 9 / 5 + 32;
Console.WriteLine("Temperature in Fahrenheit: {0:00.0}°F", number);
}
else if (conversionType == 2)
{
Console.WriteLine("Enter the Temperature in Fahrenheit: ");
number = Convert.ToDouble(Console.ReadLine());
number = (number - 32) * 5 / 9;
Console.WriteLine("Temperature in Celsius: {0:00.0}°C", number);
}
}
catch (FormatException fe)
{
Console.WriteLine("Format exception:" + fe.Message);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
// do something additional for all cases
Console.WriteLine("Try again? (Y/N): ");
}
}
while (Console.ReadLine().ToUpper() == "Y");
}

最新更新