使用catch-all模式时,无法声明未使用的异常变量

b0x*_*0rz 2 c# try-catch

在这样的情况下,最佳做法是什么:

try
{
   // do something
}
catch (SpecificException ex)
{
    Response.Redirect("~/InformUserAboutAn/InternalException/");
}
Run Code Online (Sandbox Code Playgroud)

我得到的警告ex从未使用过的.

但是我需要的是告知用户,所以我不需要它.

我只是这样做:

try
{
   // do something
}
catch
{
    Response.Redirect("~/InformUserAboutAn/InternalException/");
}
Run Code Online (Sandbox Code Playgroud)

不知怎的,我不喜欢那样,看起来很奇怪!!?有小费吗?最佳做法?

处理这个问题的方法是什么.

日Thnx

Mar*_*off 8

你只是不声明变量:

try
{
   // do something
}
catch (SpecificException)
{
    Response.Redirect("~/InformUserAboutAn/InternalException/");
}
Run Code Online (Sandbox Code Playgroud)

捕获时这是一个没有实际意义的点System.Exception(在您的原始示例中,它与空的不完全相同catch- 例如,空的catch也会捕获COM异常),但这是正确的构造.

如果你通过其他分析引擎(例如Gendarme)运行你的代码,你也会被警告说,捕捉平原Exception是一种糟糕的做法,因为除了你真正想要捕获的内容之外,它还可以掩盖其他异常.在维护遗留代码的过程中,我咬了几次 - 我们正在捕捉并忽略Exception文件删除(或类似的东西),但主要逻辑无法正常工作.我们应该只抓住一个IOException,但我们抓住并丢弃NullReferenceException导致失败的那个.

那并不是说你永远不应该抓住Exception; 很少.