About Links Archives Search Feed Albums of Note

C# Coding Standards, Mid 2019 Edition

Notes from Effective C#, 3e and More Effective C#, 2e, both by Bill Wagner.

  1. Use var except when differentiating between number types.
  2. Use public static readonly T instead of public const T.
  3. Use properties instead of data fields. Properties can also be private, protected, internal, virtual, implicit, explicit, etc.
  4. Assume default access level for methods and properties is private. Promote to protected, internal or public as and when required.
  5. Ensure that 0 (zero) is a valid state fr value types. Especially enums.
  6. Use is or as where possible rather than casts.
  7. Use interpolated strings like $"The value is {Math.Pi.ToString()}" instead of string.Format().
  8. Use membership initializers like var myList = new List<string>(); rather than assignment statements after variable is declared.
  9. Minimize duplicate initialisation code by having contructors call other constructors.
public MyClass() : this(0, string.Empty) {}
public MyClass(int  count, string value) { \\things occur  }
  1. Prefer iterator methods to returning collections.
public static IEnumerable<char> GenerateAlphabet()
    var letter = 'a';
    while (letter < 'z')
        yield return letter;
  1. Try to use LINQ queries instead of c# loops. Query syntax keywords are from, where, select, orderby (descending). Or you could use the method-style of LINQ depending on readability. The point is to try not to use for, while, do while or foreach. For example
(from n in Enumerable.Range(0, 100)
 select n * n).ToArray();

myList.ForAll<string>(n => Console.WriteLine(n));
  1. Don’t call ToList() or ToArray() to queries and draw the whole resultset into memory until absolutely necessary. Or rather, go for lazy rather than eager evaluation where possible.
  2. Use Single() and First() to enforce semantic expectations on queries.
    • Single() returns exactly one element. If zero or more than one are returned, it throws an exception.
    • SingleOrDefault() returns exactly one element. If zero, returns null. Otherwise, it throws an exception.
    • Use First() or FirstOrDefault() if you are expecting more than one results but want a specific one.
Posted on August 6, 2019   #Code  

← Next post