我正在制作一个图书馆,以便其他人可以使用,我想让它变得无懈可击(如果这是正确的术语)。在下面的代码中,我想在字节数组的索引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说最后一个捕获块是多余的。我不明白,为什么?!这是否意味着没有机会达到最后一个捕获块?
答案 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)
这不是优先问题。
它是多余的,因为抛出相同的异常相当于不在那里的块。