如何确定exception是否属于特定types
我有一段try catch代码:
try { ... } catch(Exception ex) { ModelState.AddModelError( "duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique"); }
对于这段代码,我试图将一条logging插入到数据库中:dba已经设置好了,以便数据库检查重复项,如果有重复项则返回一个错误。 目前,正如您所看到的,无论发生什么错误,我都会向模型添加相同的错误。 我希望它改变,所以这个错误只会被添加到模型,如果它是由dba设置的重复错误引起的。
以下是我想要捕捉的错误。 注意它是在内部例外。 谁能告诉我如何具体抓住这一个?
在当前捕获之前添加以下内容:
catch(DbUpdateException ex) { if(ex.InnerException is UpdateException) { // do what you want with ex.InnerException... } }
将System.Threading.ThreadAbortException
replace为您的exception。
try { //assume ThreadAbortException occurs here } catch (Exception ex) { if (ex.GetType().IsAssignableFrom(typeof(System.Threading.ThreadAbortException))) { //what you want to do when ThreadAbortException occurs } else { //do when other exceptions occur } }
你的意思是
catch (Exception e){ if ( e.GetType() == XyzException) //if (e.GetType().ToString() == "XyzException") //if (e.GetType().Name == .....) }
您可以看一下SQLException类,并检查exception消息的内容(如果它包含您现在在内部exception中看到的内容)。就像这样:
try { //your code here } catch (SQLException ex) { if (ex.Message.Contains("Cannot insert duplicate key in obj....")) { //your code here } }
- 在64位版本的Windows上的WinForms应用程序中,VS2010不显示未处理的exception消息
- Java中printStackTrace()方法的用法是什么?
- 我可以在PowerShell中获得详细的exception堆栈跟踪吗?
- 你如何实施重新尝试抓住?
- Oracle PL / SQL – 使用自定义SQLERRM引发用户定义的exception
- 捕获在Android上运行的本机代码引发的exception
- 等待try / catch / finally的一个好的解决scheme?
- 捕获和重新抛出.NETexception的最佳实践
- catch块内抛出的exception – 它会再次被捕获吗?