try catch块中的异常优先级

时间:2012-10-12 20:54:27

标签: c# .net exception resharper

我正在制作一个图书馆,以便其他人可以使用,我想让它变得无懈可击(如果这是正确的术语)。在下面的代码中,我想在字节数组的索引8处检查byte。如果库的用户提供的字节长度小于9,我想警告用户。请考虑以下代码:

    try
    {
        int payloadSizeFromByteArray = Packet[8];
    }
    catch(IndexOutOfRangeException)
    {
        throw new IndexOutOfRangeException("Packet is not valid. Does noe contains byte at index 8 which stores incoming payload length.");
    }
    catch (Exception)
    {
        throw;
    }

ReSharper说最后一个捕获块是多余的。我不明白,为什么?!这是否意味着没有机会达到最后一个捕获块?

4 个答案:

答案 0 :(得分:6)

这是多余的,因为你在最后一次捕获中没有做任何事情。 throw;通常会发生。

答案 1 :(得分:5)

这是因为除了例外你没有做任何事情。

你只是“重新投掷”它。

答案 2 :(得分:2)

如前所述,这是因为你只是在重新抛出它。 我想补充两件事:

try { ... }
catch( IndexOutOfBoundsException e )
{
 throw new IndexOutOfBoundsException ("your message", e);
}

我会添加原始异常

一般情况下,我会改变它,在函数的开头我会添加

Contract.Requires( Packet.Length == 8, "your message)" );

这也会增加一些编译时检查(代码契约),也避免了以前的已知异常。

答案 3 :(得分:1)

这不是优先问题。

它是多余的,因为抛出相同的异常相当于不在那里的块。