我在try catch块(c#)中有一段代码。代码块可以抛出两个异常(ArgumentException / NullRefernceException)。
try
{
//Code
}
catch(NullRefernceException Ex)
{
//Error Handling Code
}
catch(ArgumentException Ex)
{
//Error Handling code
}
错误处理代码在两个例外中都是相同的。所以我可以在ArgumentException catch块中保留错误处理代码,并且在NullRefernceException上我可以抛出ArgumentException,因为我有一个catch块后面。不确定它是否会起作用,是否对性能有任何影响,是否是一种良好的编程习惯。
我没有选择,只是在两个catch块中都有相同的代码,或者有一个单独的方法来保存错误处理代码?
我不想将错误处理代码保存在单独的方法中并调用。
答案 0 :(得分:4)
如果在NullReferenceException的catch中抛出ArgumentException,那么它根本不会被ArgumentException块捕获。它会被提升到更高的水平。
投掷和捕获例外情况非常昂贵。你真的不应该这样做只是为了避免两次编写相同的代码。要不重复您的代码,只需使用常用的处理方法/类
答案 1 :(得分:2)
我总是尝试遵循DRY原则,即代表不要重复自己,即不要放置冗余代码,因为当你需要更新某些东西时,你可能会弄乱某些东西。因此,我建议将公共逻辑放在一个单独的方法中,并从两个例外中调用它。
答案 2 :(得分:1)
要解决您的问题,您可以创建一个方法,而不是在两个catch块中写入相同的代码
例如
try
{
//Code
}
catch(NullRefernceException Ex)
{
HandleError();
}
catch(ArgumentException Ex)
{
HandleError();
}
答案 3 :(得分:1)
也许你可以
try
{
}
catch(Exception ex)
{
if (ex is NullRefernceException || ex is ArgumentException)
{
//do something
}
else
{
//maybe re-throw the exception
}
}
答案 4 :(得分:-1)
try
{
//Code
}
catch(Exception Ex)
{
//Error Handling Code for both cases
}
保持一般性,因为您的try代码只产生两种类型的异常,并且错误处理总是相同的
答案 5 :(得分:-1)
ArgumentException
和NullReferenceException
都继承自SystemException
所以如何使用
try
{
//code
}
catch(SystemException EX)
{
//handle error
}