In Java there is a feature called the Catch or Specify Requirement. This feature requires that each method specify what exceptions it may throw. Any caller to that method must either include a catch block for the exceptions or specify that it can pass the exceptions up the call chain. A Java application will not compile if all exceptions are not handled.
C# does not have any similar feature. When working with unfamiliar system classes, I typically refer to MSDN to learn what exceptions they may raise. Unfortunately if I miss something, the C# compiler does not provide any warning.
C# does provide the ability to document the exceptions using the <exception> tag, but this is only used to generate documentation and provide intellisense in Visual Studio. There is a ReSharper add-in called Exceptional which warns you about uncaught exceptions. I have not tried it, but according to feedback on Stack Overflow, it generates too much noise to be useful.
My general practice is to use generic exception handling blocks at the highest level of my code so errors can at least be caught, logged, and feedback given to the user.