繁体   English   中英

如何使用 C# 通过 try 和 catch 正确地进行异常处理

[英]How to properly do Exception Handling with try and catch using C#

我试图在这个小代码示例中包含异常处理。 当我被提示输入conversionType时,我尝试输入应该触发catch代码并打印出错误消息的字符串,但代码只是像任何其他错误一样关闭,表明错误未被捕获尝试捕获块。 我仍在学习如何在 C# 中进行异常处理。 那么有没有办法正确捕获异常并防止代码崩溃?

static void Main(string[] args)
        {
            int conversionType;
            double number;
            Console.WriteLine("Choose the type of conversion:\n" +
                              "1.Celsius to Fahrenheit\n" +
                              "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这样的函数返回一个 boolean 表示它们是否成功。

你应该放一个Console.ReadLine(); 在代码的末尾,您可以看到异常。

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

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

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

    static void Main(string[] args)
    {
        int conversionType;
        double number;

        do
        {
            try
            {
                Console.WriteLine("Choose the type of conversion:\n" +
                 "1.Celsius to Fahrenheit\n" +
                 "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");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM