Essential C# Extension Methods  Suggest an edit

Extension methods for chaining

When an extension method returns a value that has the same type as its this argument, it can be used to “chain” one or more method calls with a compatible signature. This can be useful for sealed and/or primitive types, and allows the creation of so-called “fluent” APIs if the method names read like natural human language.

void Main()
{
    int result = 5.Increment().Decrement().Increment(); 
    // result is now 6
}

public static class IntExtensions 
{
    public static int Increment(this int number) {
        return ++number;
    }

    public static int Decrement(this int number) {
        return --number;
    }
}

Or like this

void Main()
{
    int[] ints = new[] { 1, 2, 3, 4, 5, 6};
    int[] a = ints.WhereEven();
    //a is { 2, 4, 6 };
    int[] b = ints.WhereEven().WhereGreaterThan(2);
    //b is { 4, 6 };
}

public static class IntArrayExtensions
{
    public static int[] WhereEven(this int[] array)
    {
        //Enumerable.* extension methods use a fluent approach
        return array.Where(i => (i%2) == 0).ToArray();
    }

    public static int[] WhereGreaterThan(this int[] array, int value)
    {
        return array.Where(i => i > value).ToArray();
    }
}

Table Of Contents
22 Enum
25 GUID
48 Extension Methods
107 Stream
108 Timers
  ↑ ↓ to navigate     ↵ to select     Esc to close