Space character should be placed before and after the following operators and punctuators (if operator or punctuator is placed before line break, the space after it unnecessary):
+ - * / % & | ^ = < >
&& || << >> == != <= >= += -= *=
/= %= &= != ^= <<= >>=
Space before opening round bracket is optional.
Comma should be followed by space (but space is disallowed before comma).
Operators and punctuators can end line, but should not start line.
Line length
It’s recommended not to create source code lines longer than 80 characters.
General style recommendations
Structures and classes
Do not declare structures (except for unmanaged code interoperability).
Ref and out parameters
Do not use ref and out parameters (except for unmanaged code interoperability).
Operator overloading
Do not use operator overloading.
Collections
Always try to use System.Collections.Generic classes instead of System.Collections ones as much as possible.
Partial types
Do not put declaration of the single type in several files (do not use partial types until it is forced by IDE).
Anonymous methods
Use anonymous methods cautiously. Generally, apply the following rules:
Ø Use anonymous method if you need up to five code lines;
Ø Use anonymous method if you need to capture one or two external variables.
5.7 C# 3.0 features
Lambda expressions
Ø Prefer methods over lambda expressions when the same code is used repeatedly.
Ø Prefer lambda expressions where anonymous delegates would have been appropriate in C# 2.0.
Extension methods
Ø Try to avoid extension methods usage.
Ø Put extension methods in their own static class.
Ø Consider grouping extension methods that extend a particular class into a single static class, and name that class <ClassName>Extensions.
Ø Keep extension method classes in their own namespace to mitigate potential name collisions (if you run into a name collision you're forced back to using a static method call).
Anonymous types
Do not use anonymous types (except for very short-lived data in LINQ).
Implicitly types local variables
Ø Prefer explicitly-typed local variables.
Ø Do not use var with intrinsic types.
Ø Use var with LINQ statements where the result is not an intrinsic type.
Object initializers
Prefer object initializers to one-property-per-statement object/element initialization.
Automatic properties
Prefer automatic properties over class field when property acts like a simple wrapper.
References
The following materials are referenced within the document:
[1]. .NET Framework General Reference - Naming Guidelines
[2]. C# Language Specification
Glossary
The glossary contains terms and abbreviations that you should be familiar with when reading the document:
Pascal Case
The first letter in the identifier and the first letter of each subsequent concatenated word are capitalized. You can use Pascal case for identifiers of three or more characters. For example: