【问题标题】:Suppress warning on unused exception variable in C#禁止对 C# 中未使用的异常变量发出警告
【发布时间】:2010-12-21 14:17:13
【问题描述】:

我有这个代码:

try {
    someMethod();
} catch (XYZException e) {
    // do something without using e
}

这样做会给我一个关于声明但从不使用 e 的警告,我讨厌它。但是,我也不想使用没有该变量的catch 子句,因为这样它将捕获所有异常,而不仅仅是XYZExceptions。这似乎是一个相当经常发生的模式。我知道我可以使用#pragma warning disable 0168 来抑制警告,但我并没有真正找到一个非常优雅的解决方案。有没有更好的办法?

【问题讨论】:

  • “仇恨”是一个如此强烈的词,但考虑到你头像的下巴和愤怒的眉毛,可能很贴切:-)

标签: c# visual-studio-2008 exception-handling


【解决方案1】:

如下定义不带异常变量的catch子句:

try {
    someMethod();
} catch (XYZException) {
    // do something without using e
}

【讨论】:

  • 我很想知道为什么会这样。这是一种仅限捕获的机制吗?
  • 为什么它不能工作? e(或任何你放在那里的东西)将异常投射到一个对象上,这是有代价的,那么如果你不使用它为什么要这样做呢?
【解决方案2】:

如下定义不带异常变量的catch子句:

try {
    someMethod();
} catch (XYZException) {
    // do not state e in catch clause
}

【讨论】:

  • 重复条目;浪费时间阅读这篇文章,看看有什么不同。也许有人应该整理一下? (意识到这不是 太多 时间,但当它们是相同的答案时似乎是一种浪费:-p)
  • 我不仅浪费时间阅读重复的条目。我还浪费时间阅读上面标记这一事实的评论。对阅读所有内容的好奇的人有祸了。
  • 请注意,两个副本是同时写入的。
  • @ChristopherLightfoot 这个答案实际上是在另一个答案之前 41 秒给出的。
  • 如果您投票赞成 Jan 的回答,请公平起见并投票赞成 Tim 的回答,因为两人同时回答了这个问题 - Tim 甚至是第一个。
【解决方案3】:

另一种选择是使用

     try 
     {
          someMethod();
     } 
 #pragma warning disable 0168
     catch (XYZException e)
 #pragma warning restore 0168
     {
         // do not state e in catch clause
     }

这在 Visual Studio 2015 中很有用,因为在使用 catch 上的断点进行调试时,默认情况下它无法查看异常。

【讨论】:

    【解决方案4】:

    使用System.Diagnostics.CodeAnalysis.SuppressMessage 属性。

    visit Microsoft

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多