我正在制作一个图书馆,以便其他人可以使用,我想让它防弹(如果那是正确的术语)。在下面的代码中,我想检查字节数组索引 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 块?

最佳答案

如上所述,这是因为您只是在重新抛出它。
我要补充两点:

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

我会添加原始异常(exception)

一般来说,我会改变它,在函数的开头我会添加
Contract.Requires( Packet.Length == 8, "your message)" );

这还将添加一些编译时检查(代码契约(Contract))并避免已知的异常。

关于c# - try catch 块中的异常优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12866967/

10-09 18:40
查看更多