The following is my own personal list of things to avoid in C#. I use this as a guide for my own code reviews. I’ll add points as and when I find them, feel free to make suggestions.
1.1 Use String.IsNullOrEmpty instead of String == null.
1.2 If a class contains only value types and no methods, consider replacing it with a struct.
1.3 For objects that implement IDisposable, instantiate them inside a ‘using’ block.
1.4 Code to an interface, not a specific class.
1.5 Code should be open to extension, but closed to modification.
2.1 Start the namespace with the company name.
2.2 Do not use hungarian notation for variable names.
2.3 Prefix I to interface names.
2.4 Suffix Exception to exception names.
2.5 Namespace, class and method names should use upper Camel casing.
2.6 Variable names should use lower Camel casing.
2.7 Do not use abbreviations as variable names.
2.8 Prefix boolean variables and properties with ‘Is’.
3.1 All classes should have a header description.
3.2 Methods should have descriptions, including their variables.
3.3 Use XML tags for documentation.
4.1 Don’t create instances of Exception, use a derived Exception.
4.2 Only catch exceptions where you need to take a specific action i.e. Record the error in a log.
4.3 Preserve the stack trace when rethrowing an Exception, use ‘throw;’ instead of ‘throw ex;’.
4.4 Don’t throw Exceptions from static constructors.
5 Program Flow
5.1 Use foreach instead of for.
5.2 Always include the default case in a switch statement.