Maison > développement back-end > C++ > Capturer des copies ou des références en C# Lambdas : quand choisir lequel ?

Capturer des copies ou des références en C# Lambdas : quand choisir lequel ?

Mary-Kate Olsen
Libérer: 2025-01-19 00:16:09
original
626 Les gens l'ont consulté

Capturing Copies or References in C# Lambdas: When Should You Choose Which?

La différence entre les copies capturées et les références dans les expressions C# Lambda

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();
    }
}
Copier après la connexion

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));
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal