处理异常

时间:2010-11-24 07:22:11

标签: c# exception-handling

我在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块中都有相同的代码,或者有一个单独的方法来保存错误处理代码?

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

6 个答案:

答案 0 :(得分:4)

  1. 如果在NullReferenceException的catch中抛出ArgumentException,那么它根本不会被ArgumentException块捕获。它会被提升到更高的水平。

  2. 投掷和捕获例外情况非常昂贵。你真的不应该这样做只是为了避免两次编写相同的代码。要不重复您的代码,只需使用常用的处理方法/类

答案 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)

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

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