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
}