最佳答案
我在 C # 中遇到了这个新特性,它允许在满足特定条件时执行 catch 处理程序。
int i = 0;
try
{
throw new ArgumentNullException(nameof(i));
}
catch (ArgumentNullException e)
when (i == 1)
{
Console.WriteLine("Caught Argument Null Exception");
}
我只是想知道这东西什么时候能派上用场。
一种情况可能是这样的:
try
{
DatabaseUpdate()
}
catch (SQLException e)
when (driver == "MySQL")
{
//MySQL specific error handling and wrapping up the exception
}
catch (SQLException e)
when (driver == "Oracle")
{
//Oracle specific error handling and wrapping up of exception
}
..
但这也是我可以在同一个处理程序中做的事情,并根据驱动程序的类型将其委托给不同的方法。这是否使代码更容易理解?可以说没有。
我能想到的另一种情况是:
try
{
SomeOperation();
}
catch(SomeException e)
when (Condition == true)
{
//some specific error handling that this layer can handle
}
catch (Exception e) //catchall
{
throw;
}
Again this is something that I can do like:
try
{
SomeOperation();
}
catch(SomeException e)
{
if (condition == true)
{
//some specific error handling that this layer can handle
}
else
throw;
}
使用“ catch,when”特性是否会使异常处理更快,因为与处理处理程序中的特定用例相比,处理程序本身被跳过,而且堆栈解除可以更早地发生?有没有更适合这个特性的特定用例,人们可以将其作为一个好的实践来采用?