MISE À JOUR: en supposant C# 6, les chances sont que votre cas peut être exprimé sous la forme d'un filtre d'exception. Telle est l'approche idéale du point de vue de la performance en supposant que votre exigence peut être exprimée en termes de celui-ci, par exemple:
try
{
}
catch (Web2PDFException ex) when (ex.Code == 52)
{
}
En supposant C# < 6, le plus efficace est d'attraper un type Exception
spécifique et ne manipulation basé sur cela. Tout fourre-tout traitement peut être fait séparément
try
{
}
catch (Web2PDFException ex)
{
}
ou
try
{
}
catch (Web2PDFException ex)
{
}
catch (Exception ex)
{
}
ou (si vous avez besoin d'écrire un gestionnaire général - qui est généralement une mauvaise idée, mais si vous êtes sûr qu'il est préférable pour vous, vous êtes sûr):
if(err is Web2PDFException)
{
}
ou (dans certains cas, si vous avez besoin de faire des choses de la hiérarchie de type plus complexe qui ne peut pas être exprimé avec is
)
if(err.GetType().IsAssignableFrom(typeof(Web2PDFException)))
{
}
ou de passer à VB.NET ou F # et utiliser
is
ou
Type.IsAssignableFrom
dans les filtres d'exception
si (err est Web2PDFException) est que je avais besoin :) – Tomas
Pour utiliser le " est "opérateur il n'a pas besoin de passer à VB.NET –
@BeowulfOF: Je sais, mais s'il essaie juste de faire un filtrage basé sur les types - c'est-à-dire une sorte de capture conditionnelle etc., il peut être utile d'utiliser un * dans un filtre d'exception plutôt qu'un bloc de capture * - il peut s'agir d'une voie d'approche qui fonctionne. Ma suggestion initiale (et c'est toujours dans la réponse) est un est dans le bloc catch. La conclusion est que, étant donné que l'utilisation d'un «est» est normalement une mauvaise odeur, nous pourrions aussi bien avoir une liste de solutions possibles et laisser Tomas choisir ce qui lui convient le mieux dans son contexte spécifique. Mais oui, c'est peu probable. –