关于异常处理的简单问题
public void Test()
{
try{
fun1();
fun2();
fun3();
fun4();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
客户端调用Test方法,是不是只要在Test方法加个总异常捕获,fun1,fun2,..就不用进行异常处理?(fun1,fun2……不处理细节异常)。
------解决方案--------------------可以这样做,如果你在fun1,fun2....里面处理了异常而没有throw的话,你Test方法中反而不能try到异常了,这就是常说的把异常吞掉了。
更多的做法是这样,在底层方法(fun1,fun2...)中捕获异常,并把底层的系统异常转化为业务异常并throw,然后上层捕获并处理业务异常。
比如fun1,fun2...是数据库操作的方法,在这个方法中可能会出现sql语句错误。
void fun1()
{
try
{
//操作数据库
}
catch (Exception ex)
{
//或使用自定义异常
throw new Exception("数据库操作错误!");
}
}
这样你可以在Test方法中继续捕获异常,显示在界面上。
因为很多时候操作数据库出现的异常会暴露数据库表名、列名等危险信息,不适合直接显示到界面上去。