-5

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

我有以下代码。该代码用作重现。我希望这段代码能够达到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

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

6 回答 6

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();      
        }
    }
于 2013-06-12T06:40:20.220 回答
0

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

于 2013-06-12T06:30:43.833 回答
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;
 }

作为替代方案,finally即使在 try 块中发生异常,您也可以使用块。

...
finally
{
    Console.Read(); // Will always execute
}
于 2013-06-12T06:31:53.670 回答
0

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

于 2013-06-12T06:33:08.180 回答
0

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

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

你能做些什么来让它触手可及?那是你自己想办法。通过查看您的代码,尚不清楚您真正想要实现什么。只要您不与我们分享,没有人可以告诉您需要更改什么。

于 2013-06-12T06:34:23.840 回答
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();
    }
于 2013-06-12T06:37:20.153 回答