C# lambda

Type Signature Exemple
Action void M(params) Action<string> a = s => Console.WriteLine(s);
Func TResult M(params) Func<int,int,int> f = (x,y) => x+y;
Predicate bool M(T) Predicate<int> p = n => n%2==0;

Exemple 1


public static void test1()
{
    Func<int, int> square = x => x * x;
    Func<int, int, int> add = (a, b) => a + b;
    Func<int, int, int> multiply = (a, b) =>
    {
        Console.WriteLine($"Multiplication de {a} et {b}");
        return a * b;
    };

    Console.WriteLine(square(5)); // 25
    Console.WriteLine(add(5, 15));
    Console.WriteLine(multiply(5, 15));

    var numbers = new[] { 1, 2, 3, 4, 5 };
    var evens = numbers.Where(n => n % 2 == 0);
    foreach (var e in evens)
        Console.WriteLine(e); // 2, 4
    Action hello = () => Console.WriteLine("Bonjour Jacques !");
    hello();
}

Exemple 2


public static void test2()
{
    // Définition d'une fonction lambda qui additionne deux entiers
    Func<int, int, int> add = (a, b) => a + b;
    // Définition d'une fonction lambda qui prend une fonction en paramètre
    // et l'applique aux valeurs 2 et 3
    Func<Func<int, int, int>, int> apply = f => f(2, 3);
    Func<Func<int, int, int>, int, int, int> apply2 = (f, a, b) => f(a, b);

    int result = apply(add);
    int result2 = apply2(add, 2, 3);
    Console.WriteLine($"Résultat :  {result}"); // Résultat : 5
    Console.WriteLine($"Résultat2 : {result2}"); // Résultat : 5
}

Exemple 3



public static void test3()
{
    // Différentes fonctions lambda
    Func<int, int, int> add = (a, b) => a + b;
    Func<int, int, int> multiply = (a, b) => a * b;
    Func<int, int, int> subtract = (a, b) => a - b;
    Func<int, int, int> divide = (a, b) => b != 0 ? a / b : 0;

    // Fonction d'ordre supérieur : applique une fonction à deux entiers
    Func<Func<int, int, int>, int, int, int> apply = (f, x, y) => f(x, y);
    // Utilisation avec différentes lambdas
    Console.WriteLine($"Add      : {apply(add, 2, 3)}");      // 5
    Console.WriteLine($"Multiply : {apply(multiply, 2, 3)}"); // 6
    Console.WriteLine($"Subtract : {apply(subtract, 2, 3)}"); // -1
    Console.WriteLine($"Divide   : {apply(divide, 6, 3)}");   // 2
}

Exemple 4


public static void test4()
{
    // Fonction qui prend une lambda en paramètre
    static int Apply(Func operation, int x, int y)
    {
        return operation(x, y);
    }
    // Définition de lambdas
    Func<int, int, int> add = (a, b) => a + b;
    Func<int, int, int> multiply = (a, b) => a * b;
    // Appel avec différentes lambdas
    Console.WriteLine(Apply(add, 2, 3));      // 5
    Console.WriteLine(Apply(multiply, 2, 3)); // 6
                                              // Appel direct avec une lambda inline
    Console.WriteLine(Apply((a, b) => a - b, 2, 3)); // -1
}

Exemple 5


public static void test5()
{
    Func<int, int, int> add = (a, b) => a + b;
    Action<string> print = msg => Console.WriteLine(msg);
    Predicate<int> isEven = n => n % 2 == 0;
}

Exemple 6



public static void test6()
{
    Func<int, int, int> add = (a, b) => a + b;
    int result = add(3, 4);
    Console.WriteLine(result); // 7

    Action<string> printMessage = msg => Console.WriteLine($"{msg}");
    printMessage("Bonjour Jacques !");
    // affiche "Message: Bonjour Jacques !"

    Predicate<int> isEven = n => n % 2 == 0;
    Console.WriteLine(isEven(4)); // True
    Console.WriteLine(isEven(5)); // False
}