Heim > Backend-Entwicklung > C++ > Erfassen von Kopien oder Referenzen in C#-Lambdas: Wann sollten Sie welche auswählen?

Erfassen von Kopien oder Referenzen in C#-Lambdas: Wann sollten Sie welche auswählen?

Mary-Kate Olsen
Freigeben: 2025-01-19 00:16:09
Original
606 Leute haben es durchsucht

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

Der Unterschied zwischen erfassten Kopien und Referenzen in C#-Lambda-Ausdrücken

Beim Definieren von Lambda-Ausdrücken in C# ist es wichtig zu verstehen, wie sie mit externen Variablen interagieren. Standardmäßig neigen Lambda-Ausdrücke dazu, Verweise auf externe Variablen zu erfassen. In manchen Fällen ist es jedoch entscheidend, sie zum Kopieren dieser Variablen zu zwingen.

Betrachten Sie das folgende Beispiel, das dazu dient, eine Reihe von Zahlen mithilfe eines Lambda-Ausdrucks und einer Schleife auszugeben:

<code class="language-csharp">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();
    }
}</code>
Nach dem Login kopieren

Der obige Codeausschnitt gibt jedoch wiederholt „10“ aus, was darauf hinweist, dass der Lambda-Ausdruck einen Verweis auf die gemeinsam genutzte Variable i erfasst. Auch wenn sich der Wert von i während der Schleife ändert, gibt der Lambda-Ausdruck immer den Endwert von i aus, der 10 ist.

Um den Lambda-Ausdruck zu zwingen, eine Kopie der Variablen anstelle einer Referenz zu erfassen, besteht eine Problemumgehung darin, eine lokale Kopie der Variablen innerhalb der Schleife zu erstellen:

<code class="language-csharp">for (int i = 0; i < 10; i++)
{
    int copy = i;  // 创建局部副本
    actions.Add(() => Console.WriteLine(copy));
}</code>
Nach dem Login kopieren

Durch das Kopieren des Werts von i in eine neue Variablenkopie erfasst der Lambda-Ausdruck effektiv den Wert von i zu einem bestimmten Zeitpunkt und in einem bestimmten Bereich. Dadurch wird sichergestellt, dass der Lambda-Ausdruck bei jeder Iteration der Schleife die richtige Zahl ausgibt.

Das Verständnis dieses Verhaltens ist für die Verwendung von Lambda-Ausdrücken in C# von entscheidender Bedeutung. Damit können Entwickler steuern, wie Lambda-Ausdrücke mit gemeinsam genutzten Variablen interagieren, und sicherstellen, dass Programme wie erwartet ausgeführt werden.

Das obige ist der detaillierte Inhalt vonErfassen von Kopien oder Referenzen in C#-Lambdas: Wann sollten Sie welche auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage