【问题标题】:How to properly do Exception Handling with try and catch using C#如何使用 C# 正确地使用 try 和 catch 进行异常处理
【发布时间】:2021-01-06 16:00:51
【问题描述】:

我试图在这个小代码示例中包含一个异常处理。当我被提示输入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);
            }
        }

【问题讨论】:

  • 可能发生的事情(如果您在 Visual Studio 中测试)是它会将错误消息打印到控制台,但随后程序窗口会立即关闭,因此您没有时间查看它。如果您在 catch 块结束后放置一个 Console.ReadLine() ,那么它应该暂停等待您在控制台窗口关闭之前按 Enter 键。但是...不要将异常用于简单的数据验证。例外应该主要是重大错误/失败。

标签: c# exception


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您应该在代码末尾添加Console.ReadLine(); 以查看异常。

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

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

    【讨论】:

      【解决方案3】:

      我认为您想要做的是在循环中多次使用该函数。 您可以像这样捕获不同的异常类型并添加 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");
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 2021-11-30
        • 1970-01-01
        • 2013-02-05
        • 2017-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多