如题所述
从C#的语法角度上讲是错误的... catch和finally至少声明其一就可以通过编译
不过实际业务处理中 try通常和catch匹配 这取决于具体的场合
因为finally是“一定”会执行的 如果你想跑完一段语句后 无论是否异常都执行下一段代码 则需要finally的支持 比如如下的伪代码:
var conn = new connection()try {
conn.open();
conn.executeCommand(); //这里有可能会出现异常
} finally {
conn.close();
conn.dispose();
}
这段语句执行时 如果中间发生异常 close和dispose依然会正确的执行 然后抛出异常 这就是隐藏了catch段
不过更好的书写方式通常是这样:
var conn = new connection()try {
conn.open();
conn.executeCommand(); //这里有可能会出现异常
} catch (Exception) {
throw; //这里直接写throw 保持了异常出现原有的调用栈 这是区分throw ex;的写法
} finally {
conn.close();
conn.dispose();
}
即使不catch直接抛出 最好也要主动的声明出来 避免语义上的混淆并且增强代码可读性——后面的人可不知道你是不想catch还是忘记catch。
当然 如果你不需要finally这种特性 只要使用try catch就够了 也没有问题
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-05-20
错误,catch和finally可以只有一个。
try
{
MessageBox.Show("OK");
}
finally
{
}
try
{
MessageBox.Show("OK");
}
finally
{
}