我试着抓住我捕捉不同错误类型的地方:
catch (XmlException XmlExp)
{
return false;
}
catch (XmlSchemaException XmlSchExp)
{
return false;
}
catch (Exception GenExp)
{
throw GenExp;
}
请注意,XMLException XMLExp已声明但从未使用过。是否可以在不声明局部变量的情况下捕获XMLException?
这是有效的代码:
catch (XmlException)
{
return false;
}
答案 0 :(得分:17)
是的,就像这样
catch (XmlException)
{
return false;
}
catch (XmlSchemaException)
{
return false;
}
catch (Exception GenExp)
{
// inspect or use GenExp
throw;
}
答案 1 :(得分:6)
这样做
catch (XmlException)
{
return false;
}
catch (XmlSchemaException)
{
return false;
}
catch (Exception)
{
throw;
}
答案 2 :(得分:5)
只需使用
catch (XmlException)
{
throw;
}
当你抛出像throw ex
这样的特定异常对象时,堆栈跟踪会被覆盖。
答案 3 :(得分:2)
是。只是错过变量名称:
catch (XmlException)
{
return false;
}
答案 4 :(得分:1)
是的,你可以:
catch (XmlException)
{
return false;
}
当然,关于例外的所有其他规则都适用 - 即不使用它们进行流量控制,避免任何可能被抛出的情况等等。
答案 5 :(得分:0)
catch (XmlException)
{
return false;
}
catch (XmlSchemaException)
{
return false;
}
catch (Exception GenExp)
{
throw GenExp;
}
只需省略变量名称即可。
对于最后一次捕获,我建议使用throw;
而不是throw GenExp
- 因为后者丢失了调用堆栈。虽然如果你真的只做一次重新抛出,那么就省略整个catch块。
答案 6 :(得分:0)
catch (Exception unknownException)
{
throw new Exception("Unknown error.", unknownException);
}
答案 7 :(得分:0)
catch
{}
也是有效的代码并捕获所有异常。
答案 8 :(得分:0)
重要通知!
这是一种非常糟糕的编程风格 - 使用类似的结构:
try
{
// smth
}
catch(IOException e)
{
throw e;
}
这意味着,异常堆栈将从此点(堆栈)开始,并且您可以丢失任何低于此点的堆栈帧。
正确:
try
{
//smth
}
catch(IOException e)
{
throw;
}
答案 9 :(得分:0)
1-我认为你应该自己做这件事。
2- catch(XmlException)//有效
{
返回false;
}
catch(XmlSchemaException)//有效
{
返回false;
}
catch(Exception GenExp)
{
抛出GenExp;
}
//有效但没有意义,因为Exception会发生并且没有尝试catch块来handel它