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的最后一部分
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
}