Я привык использовать общий оператор catch, и я обращаюсь с этими исключениями в общих чертах. Это плохая практика? Если да, то как мне узнать, какие конкретные исключения могут быть сгенерированы, а какие - перехватить?
При использовании каркасных методов вы можете проверить документацию MSDN. У каждого описания метода есть список потенциально генерируемых исключений.
В качестве примера проверьте параграф Исключения в File.Open () документация.
При использовании собственного метода вы должны знать об исключениях, которые могут быть вызваны вашими методами.