尝试捕获无法访问的代码检测

时间:2013-06-12 06:29:07

标签: c#

注意:请在下载之前阅读整个问题。

我有以下代码。该代码充当了repro。我希望此代码达到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

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

6 个答案:

答案 0 :(得分:2)

你错过了try / catch

中的finally部分
    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();      
        }
    }

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的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
}

答案 3 :(得分:0)

好吧那是因为它会立即通过try块中的异常(抛出新的formatexception)并且永远不会超越该行。

答案 4 :(得分:0)

try块中抛出异常,这意味着将执行catch块。你的catch块返回(如果if为真)或者抛出异常(throw语句)。

无论哪种方式,您的功能都永远不会到达您收到警告的代码。

你能做些什么来让它可以到达?那是你要弄明白的。从查看代码来看,目前还不清楚您实际想要实现的目标。只要您不与我们分享,任何人都无法告诉您需要改变的内容。

答案 5 :(得分:0)

我猜你想做什么:

    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();
    }