C# commonly used coding standards
In this article I will present you with some most commonly used coding standards that I have come across while working in multiple companies.
1. Naming Conversions
1.1 Use Pascal Casing for class and method names and camel Casing for local variables
Pascal Casing:
public class MyClass { public void GetData() { } }
Camel Casing
public class MyClass { public void GetData(string productName) { var myProduct = GetProductFromDatabase(productName); } }
1.2 Do not use underscores for member names eg.
//correct
public string myVariable; public int myProduct;
//incorrect
public string my_variable; public int _ myProduct;
1.3 Do not use shortcuts eg.
//correct public string databaseConnectionString; //incorrect public string dbConnStr;
1.4 Give the function names appropriate to the returning values eg.
//correct public string GetProductReferenceNumber() { } //incorrect public string GetObjectString() { }
1.5 Use predefined type names instead of system names eg.
//correct int ProductID; string ProductName; //incorrect Int32 ProductID; String ProductName;
1.6 Use the var name for variable declaration if the type can be easily identified from the right hand side of the equation eg.
//correct var name = "myname"; //incorrect var myObject = GetBasicObject();
1.7 Use noun names for classes
//correct public class Product { } //incorrect public class UserProduct { }
1.8 Use „I” prefix for interface names eg.
public interface IProductCollection
1.9 Declare private variables on the top of the classes starting with statics on the top
public class Product { static string productName; static int productCount; int currectCount; string productLocationName; public void Calculate() { } }
1.10 Use singular names for enums except bit field enums eg.
//correct enum ProductType { ProductTypeOne, ProductTypeTwo } //incorrect enum ProductTypes { ProductTypeOne, ProductTypeTwo } //correct enum ProductTypes { ProductTypeOne = 1, ProductTypeTwo =2 }
2. General rules
2.1 Use && and || operands instead of single & Or |. This will avoid unnecessary comparisons eg.
//correct If(product != null && (product.Id > 0 || product.Name.length > 0)) { } //incorrect If(product != null & (product.Id > 0 | product.Name.length > 0)) { }
2.2 Always use (vertically aligned) curly brackets eg.
//correct foreach(var item In myCollection) { var result = item.Result; } //incorrect foreach(var item In myCollection) var result = item.Result;
2.3 Use „using” statements for objects that implement IDisposable interface eg.
//correct using(var connection = new SqlConnection()) { using( var reader = command.ExecuteReader()) { } } //incorrect var connection = new SqlConnection(); var reader = command.ExecuteReader(); reader.close(); connection.close();
2.4 Use lambda expressions for events that you do not need have reference to at later stage in you code eg.
//correct public MyForm() { this.Click += (s, e) => { MessageBox.Show(((ClickEventArgs)e).Point.ToString()); }; }
//not advisable public MyForm() { this.Click += new EventHandler(MyFunction_Click); } void Form1_Click(object sender, ClickEventArgs e) { MessageBox.Show(((ClickEventArgs)e).Point.ToString()); }
2.5 Use object initializers for creating object eg.
//correct var product = new Product() { ProductID = 1, ProductName = “Test”, CreateDate = DateTime.Now } //incorrect var product = new Product(); product. ProductID = 1, product .ProductName = “Test”, product .CreateDate = DateTime.Now
2.6 Each function should only perform one task eg.
//correct public int CalculatePriceWithVAT(double initPrice, double vatRate) { return initPrice = initPrice * (1- vatRate); }
//incorrect public int CalculatePrice () { var initPrice = GetInitPrice(); var vatRate = GetVatFromDataBase(); return initPrice = initPrice * (1- vatRate); }
2.7 Separate parts of the code into logical groups eg.
//correct int CalculateStock() { var fakeValue = 12; fakeValue += 12; var fakeProduct = new Product(); var result = fakeProduct.Count + fakeValue; return result; }
//avoid int CalculateStock() { var fakeValue = 12; fakeValue += 12; var fakeProduct = new Product(); var result = fakeProduct.Count + fakeValue; return result; }
2.8 In LINQ use following to check bool values eg:
//correct If(products.Any()) { } //incorrect If(products.Count() > 0 ) { }