多次捕获异常 - C#
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多次捕获异常 - C#相关的知识,希望对你有一定的参考价值。
private void ProcessData(IProcessor processor)
{
Data data = new Data();
try
{
processor.Process(data);
}
catch( Exception e )
{
CustomCode(e);
}
}
具体的IProcessor processor.Process
方法实现:
public void Process(Data data)
{
try
{
Thing a = null;
a.MakeSomething();
}
catch( NullPointerException e )
{
DoSomething();
}
}
我想为CustomCode()
方法或其“try”块中出现的所有异常运行ProcessData()
方法(从ProcessData()
调用堆栈中的所有代码直到堆栈结束,抛出异常应由多个异常处理程序处理 - 在本例中均为应该运行DoSomething()
和CustomCode()
)。我怎样才能做到这一点?我知道我可以加“扔;”在“DoSomething();
”之后但这意味着处理器的每个实现中的每个程序员都应该记住写“throw;”在catch(...)中,以便CustomCode(e)
可以运行。能以某种方式做得更好吗?
答案
我同意@Seabizkit评论,你可能不希望在Process
实现中尝试捕获或者至少throw;
在Process
的catch块结束时异常隐藏它是一种不好的做法。
否则,解决方案可能是在finally
中有一个ProcessData()
块,你在那里检查数据是否被处理(例如,设置了一个特殊标志),如果没有,这意味着出现问题并且必须执行CustomCode()
,但是你不要不知道是什么样的例外。就像是:
private void ProcessData()
{
Data data = new Data();
try
{
Processor processor = new Processor();
processor.Process(data);
}
catch( Exception e )
{
CustomCode(e);
}
finally {
if (!data.IsProcessed) CustomCode();
}
}
另一答案
public void Process(Data data)
{
try
{
Thing a = null;
a.MakeSomething();
}
catch( NullPointerException e )
{
CustomCode();
DoSomething();
}
catch(Exception ex)
{
CustomCode();
}
}
以上是关于多次捕获异常 - C#的主要内容,如果未能解决你的问题,请参考以下文章