Comment déterminer si une exception est d’un type particulier

J’ai un morceau de code catch:

try { ... } catch(Exception ex) { ModelState.AddModelError( "duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique"); } 

Pour ce morceau de code, j’essaie d’insérer un enregistrement dans une firebase database: le dba l’a configuré pour que la firebase database vérifie les doublons et renvoie une erreur s’il y a des doublons. Actuellement, comme vous pouvez le constater, j’ajoute la même erreur au modèle, quelle que soit l’erreur survenue. Je veux que cela soit modifié, donc cette erreur n’est ajoutée au modèle que si elle a été causée par l’erreur dupliquée configurée par le dba.

Voici l’erreur que je veux attraper. Notez que c’est dans l’exception interne. Quelqu’un peut-il me dire comment attraper spécifiquement celui-ci?

entrer la description de l'image ici

avant votre prise actuelle, ajoutez ce qui suit:

 catch(DbUpdateException ex) { if(ex.InnerException is UpdateException) { // do what you want with ex.InnerException... } } 

À partir de C # 6, vous pouvez effectuer les opérations suivantes:

 catch(DbUpdateException ex) when (ex.InnerException is UpdateException) { // do what you want with ex.InnerException... } 

Remplacez System.Threading.ThreadAbortException par votre 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 } } 

Pour obtenir le nom de l’exception que vous pouvez utiliser

  catch (Exception exc){ if (exc.GetType().FullName == "Your_Exception") { // The same can be user for InnerExceptions // exc.InnerException.GetType().FullName } } 

tu veux dire

 catch (Exception e){ if ( e.GetType() == XyzException) //if (e.GetType().ToSsortingng() == "XyzException") //if (e.GetType().Name == .....) } 

Vous pouvez consulter la classe SQLException – et vérifier le contenu du message de l’exception s’il contient ce que vous voyez maintenant dans votre exception interne. Quelque chose comme ceci:

 try { //your code here } catch (SQLException ex) { if (ex.Message.Contains("Cannot insert duplicate key in obj....")) { //your code here } }