Functional Programming in C# (How to write better C# code)