注意:请在下载之前阅读整个问题。
我有以下代码。该代码充当了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
答案 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)
答案 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();
}