Summary
This chapter was a departure from the imperative programming traits of C# since we explored functional programming concepts and techniques built into the language. We looked at higher-order functions, lambda expressions, partial function applications, currying, closures, monoids, and monads. We also had an introduction to LINQ with its two flavors: the method syntax and the query syntax. Most of these topics are complex and more advanced than the proposed scope of this book. Therefore, we recommend that you use other resources in order to master them.
In the next chapter, we will look at the reflection services that are available with .NET and the dynamic programming capabilities of C#.