try catch块中异常的优先级排序

3

我正在制作一个库,让其他人可以使用,我希望使其无懈可击(如果这是正确的术语)。在下面的代码中,我想检查字节数组中索引为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说最后一个catch块是多余的。我不明白为什么!这是否意味着最后一个catch块不可能被执行到?

4个回答

6
这是多余的,因为最后一个catch中没有执行任何操作。通常会执行throw;

5

这是因为你对异常并没有进行任何处理。

你只是在“重新抛出”它。


2

正如所述,这是因为您只是重新抛出了它。 我想补充两点:

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

我会添加原始异常。
通常,我会更改函数开头,添加以下内容:
Contract.Requires( Packet.Length == 8, "your message)" );

这还会增加一些编译时检查(代码合同),并避免已知的异常。

我同意添加内部异常。我没有使用过Contract,所以无法评论它。 - Jim

1

这不是一个优先级问题。

它是多余的,因为只是抛出相同的异常等同于该块不存在。


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