Exception
est le type de base pour toutes les exceptions, et en tant que tel terriblement imprécis. Vous ne devriez jamais lever cette exception parce que simplement, il ne contient pas toutes les informations utiles. Code appelant de chasse pour les exceptions ne pouvais pas lever l'ambiguïté de l'intentionnellement la levée d'une exception (à partir de votre logique) de l'autre système d'exceptions qui sont entièrement non désirées et le point de véritables défauts.
La même raison vaut également pour SystemException
. Si vous regardez la liste des types dérivés, vous pouvez voir un grand nombre d'autres exceptions très différentes de la sémantique.
NullReferenceException
et IndexOutOfRangeException
sont d'un genre différent. Maintenant ce sont de très exceptions spécifiques, afin de les jeter à la pourrait être bien. Cependant, vous ne voulez pas pour jeter ces derniers, car ils signifient qu'il y a quelques erreurs dans votre logique. Par exemple la référence nulle exception signifie que vous essayez d'accéder à un membre d'un objet qui est - null
. Si c'est une possibilité dans votre code, alors vous devriez toujours explicitement vérifiez null
et jeter un plus utile d'exception (par exemple, ArgumentNullException
). De même, IndexOutOfRangeException
s se produire lorsque vous accédez à un index non valide (sur les tableaux-et non pas des listes). Vous devriez toujours vous assurer que vous ne le faites pas, en premier lieu, et de vérifier les limites, par exemple, une matrice de première.
Il y a quelques exceptions, comme ces deux-là, par exemple, InvalidCastException
ou DivideByZeroException
, qui sont jetés pour certaines fautes dans votre code et signifie généralement que vous faites quelque chose de mal ou que vous n'êtes pas vérifier pour certaines valeurs non valides en premier. En jetant sciemment à partir de votre code, vous êtes simplement en rendant plus difficile pour le code d'appel afin de déterminer s'ils ont été jetés en raison des quelques la faute dans le code, ou juste parce que vous avez décidé de les réutiliser pour quelque chose dans votre mise en œuvre.
Bien sûr, il existe quelques exceptions (hah) à ces règles. Si vous êtes à la construction de quelque chose qui peut provoquer une exception qui correspond exactement à un existant, alors n'hésitez pas à l'utiliser, surtout si vous essayez de faire correspondre un comportement intégré. Assurez-vous de choisir un très spécifique type d'exception alors.
Toutefois, en général, à moins de trouver une (des) exception qui remplit votre besoin, vous devez toujours envisager de créer vos propres types exception pour les exceptions. Surtout quand vous écrivez le code de la bibliothèque, cela peut être très utile pour séparer l'exception des sources.