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