10 Exception handling best practices in C#