繁体   English   中英

处理异常

[英]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块中使用相同的代码,或者使用单独的方法保存错误处理代码?

我不想将错误处理代码保留在单独的方法中并调用。

  1. 如果在NullReferenceException的捕获范围内抛出ArgumentException,则此处ArgumentException块将根本不会捕获该ArgumentException。 它将被扔到更高的捕获量。

  2. 抛出和捕获异常非常昂贵。 您确实不应该这样做,只是避免编写两次相同的代码。 要不重复代码,只需使用通用的处理方法/类

我总是尝试遵循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代码仅产生两种类型的异常,并且错误处理始终相同

ArgumentExceptionNullReferenceException都继承自SystemException所以如何使用

try
{
   //code
}
catch(SystemException EX)
{
   //handle error
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM