Lors de la définition d'expressions lambda en C#, il est crucial de comprendre comment elles interagissent avec des variables externes. Par défaut, les expressions lambda ont tendance à capturer les références à des variables externes. Cependant, dans certains cas, il est crucial de les forcer à copier ces variables.
Considérons l'exemple suivant, conçu pour imprimer une série de nombres à l'aide d'une expression Lambda et d'une boucle :
class Program { delegate void Action(); static void Main(string[] args) { List<Action> actions = new List<Action>(); for (int i = 0; i < 10; i++) actions.Add(() => Console.WriteLine(i)); foreach (Action a in actions) a(); } }
Cependant, l'extrait de code ci-dessus affiche "10" à plusieurs reprises, indiquant que l'expression Lambda capture une référence à la variable partagée i. Même si la valeur de i change au cours de la boucle, l'expression lambda imprime toujours la valeur finale de i, qui est 10.
Pour forcer l'expression lambda à capturer une copie de la variable plutôt qu'une référence, une solution de contournement consiste à créer une copie locale de la variable à l'intérieur de la boucle :
for (int i = 0; i < 10; i++) { int copy = i; // 创建局部副本 actions.Add(() => Console.WriteLine(copy)); }
En copiant la valeur de i dans une nouvelle copie de variable, l'expression Lambda capture efficacement la valeur de i à un moment et dans une portée spécifiques. Cela garantit que l'expression lambda imprime le numéro correct à chaque itération de la boucle.
Comprendre ce comportement est crucial pour utiliser les expressions lambda en C#. Il permet aux développeurs de contrôler la manière dont les expressions lambda interagissent avec les variables partagées et garantit que les programmes s'exécutent comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!