[英]Handling exceptions
我在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块中使用相同的代码,或者使用单独的方法保存错误处理代码?
我不想将错误处理代码保留在单独的方法中并调用。
如果在NullReferenceException的捕获范围内抛出ArgumentException,则此处ArgumentException块将根本不会捕获该ArgumentException。 它将被扔到更高的捕获量。
抛出和捕获异常非常昂贵。 您确实不应该这样做,只是避免编写两次相同的代码。 要不重复代码,只需使用通用的处理方法/类
我总是尝试遵循DRY原则,该原则代表“不要重复自己”,即不要放置冗余代码,因为当您需要更新某些内容时,有可能会弄乱某些内容。 因此,我建议将通用逻辑放在单独的方法中,并从两个异常中调用它。
要解决您的问题,您可以创建一个方法,而不是在两个catch块中编写相同的代码
例如
try
{
//Code
}
catch(NullRefernceException Ex)
{
HandleError();
}
catch(ArgumentException Ex)
{
HandleError();
}
也许你可以
try
{
}
catch(Exception ex)
{
if (ex is NullRefernceException || ex is ArgumentException)
{
//do something
}
else
{
//maybe re-throw the exception
}
}
try
{
//Code
}
catch(Exception Ex)
{
//Error Handling Code for both cases
}
保持通用性,因为您的try代码仅产生两种类型的异常,并且错误处理始终相同
ArgumentException
和NullReferenceException
都继承自SystemException
所以如何使用
try
{
//code
}
catch(SystemException EX)
{
//handle error
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.