Capture de variables externes (fermetures)
Contexte : Les lambdas peuvent capturer des variables de la portée englobante. Les variables capturées sont stockées dans une fermeture et vivent aussi longtemps que la lambda.
int factor = 2;Func<int, int> multiplier = x => x * factor;Console.WriteLine(multiplier(5)); // 10
factor = 3;Console.WriteLine(multiplier(5)); // 15 (capture par référence)Capture de variables locales
Section intitulée « Capture de variables locales »List<Action> actions = new List<Action>();for (int i = 0; i < 3; i++){ int captured = i; actions.Add(() => Console.WriteLine(captured));}foreach (var a in actions) a(); // 0,1,2 (pas 3,3,3)Implications sur les performances
Section intitulée « Implications sur les performances »La capture peut entraîner des allocations (objets de fermeture). Évitez la capture dans les boucles critiques pour la performance.
Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »Continuation de tâche : Capturer userId dans une continuation de tâche asynchrone.
int userId = GetUserId();Task.Run(() => ProcessUser(userId));Exemple : Dans ASP.NET Core, les lambdas dans les middlewares capturent souvent des valeurs de configuration.