在C#中抑制未使用的异常变量警告

51

我有这段代码:

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

这样做会让我收到一个有关声明但从未使用e的警告信息,我非常讨厌。然而,我也不想在没有该变量的情况下使用catch子句,因为那样会捕获所有异常,而不仅仅是XYZException。这似乎是一个相当常见的模式。我知道我可以使用#pragma warning disable 0168来禁止警告,但我并不认为那是一种优雅的解决方法。是否有更好的方法?


"恨"这个词很强烈,但考虑到你头像的紧咬的下巴和愤怒的眉毛,也许很恰当 :-) - paxdiablo
4个回答

107

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

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

我很想知道这是为什么能够运行。这是一个只捕获异常的机制吗? - tfrascaroli
为什么它不能工作?e(或者你放在那里的任何东西)将异常转换为一个对象,这是有成本的,如果你不使用它,为什么要这样做? - Tom

34

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

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

6
重复条目;浪费时间阅读以查看有何不同。也许应该有人整理一下?(虽然这不是很多时间,但当它们是相同的答案时,似乎是一种浪费 :-p) - Christopher Lightfoot
7
我不仅浪费时间读重复的条目,还浪费时间阅读上面标记这一事实的评论。好奇的人读了一切也是倒霉。 - Joe
9
请注意,这两份副本是同时书写的。 - Maxim Eliseev
8
@ChristopherLightfoot 这个答案实际上是在另一个答案之前给出的,相差41秒。 - Rory McCrossan
1
如果你给Jan的答案点了赞,请公平地给Tim的答案点赞,因为两个人在同一时间回答了这个问题 - Tim甚至是第一个回答的。 - John Ranger
显示剩余3条评论

5
另一种选择是使用:
     try 
     {
          someMethod();
     } 
 #pragma warning disable 0168
     catch (XYZException e)
 #pragma warning restore 0168
     {
         // do not state e in catch clause
     }

这在Visual Studio 2015中非常有用,因为默认情况下,在catch断点调试时无法查看异常。


0

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

访问Microsoft


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接