Я наткнулся на эту страницу MSDN, в которой говорится:
Не бросайте Exception, SystemException, NullReferenceException или IndexOutOfRangeException намеренно из вашего собственного исходного кода.
К сожалению, это не мешает объяснить, почему. Я могу догадываться о причинах, но я надеюсь, что кто-то более авторитетный по этому вопросу может предложить свое понимание.
Первые два имеют некоторый очевидный смысл, но последние два кажутся теми, которые вы хотели бы использовать (и на самом деле у меня есть).
Кроме того, это единственные исключения, которых следует избегать? Если есть другие, какие они и почему их тоже следует избегать?