如何确定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.ThreadAbortExceptionreplace为您的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 } }