try catch检测到不可达代码

本文关键字:代码 catch 检测 try | 更新日期: 2023-09-27 18:17:54

注意:请在投票前阅读完整个问题

我有下面的代码。代码的作用是复制。我想要这个代码达到Console.Read();,因为我想在我的项目中使用它。我想在异常处理后继续执行。

using System;
using System.Data;
using System.Text;
namespace Sample
{
  class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new FormatException("Format");
            }
            catch (Exception ex)
            {
                if (ex is FormatException || ex is OverflowException)
                {
                    Console.WriteLine("Caught Exception");
                    return;
                }
                throw;
            }
            Console.Read();       //Unreachable Code Detected.
        }

我得到以下警告:

警告1检测到不可达代码G:'Samplework'Program.cs 39

  • 我该如何解决这个问题?
  • 我希望代码是可访问的。

try catch检测到不可达代码

你错过了try/catch的最后一部分

    static void Main(string[] args)
    {
        try
        {
            throw new FormatException("Format");
        }
        catch (Exception ex)
        {
            if (ex is FormatException || ex is OverflowException)
            {
                Console.WriteLine("Caught Exception");
                return;
            }
            throw;
        }
        // add this
        finally
        {
            Console.Read();      
        }
    }

那么,Console.Read()将永远不会执行,因为该方法要么返回,要么抛出异常。

那是因为它会直接通过try块中的异常(抛出new formatexception),并且永远不会越过那一行。

在你的try块你抛出一个异常,这意味着catch块将被执行。你的catch块要么返回(如果if为真),要么抛出一个异常(throw语句)。

无论哪种方式,你的函数都不会到达你得到警告的代码。

你能做些什么让它触手可及?这是你自己的问题。从查看您的代码来看,您实际上想要实现什么并不清楚。只要你不告诉我们,没有人能告诉你你需要改变什么。

我猜你想做什么:

    static void Main(string[] args)
    {
        try
        {
            throw new FormatException("Format");
        }
        catch (Exception ex)
        {
            if (ex is FormatException || ex is OverflowException)
            {
                Console.WriteLine("Caught Exception");
            }
            else
            {
                throw;
            }
        }
        Console.Read();
    }

您的Console.Read();语句将永远不会在您的代码中执行。

您的程序return,否则它将抛出异常。

如果您希望它可访问,您可以在catch块中创建注释行。

try
{
     throw new FormatException("Format");
}
catch (Exception ex)
{
     if (ex is FormatException || ex is OverflowException)
     {
        Console.WriteLine("Caught Exception");
        Console.Read();
        return;
     }
     //throw;
 }

作为另一种选择,即使在try块中发生异常,也可以使用finally块。

...
finally
{
    Console.Read(); // Will always execute
}