Wird LINQ einen Stapel in LIFO-Reihenfolge iterieren [Duplikat]

Dec 08 2020

Werden LINQ-Methoden den Inhalt eines Stacks (und in meinem speziellen Fall Stack ) in der LIFO-Reihenfolge (Last In, First Out) iterieren (dh in derselben Reihenfolge würde jedes Element geknallt, das die umgekehrte Reihenfolge in der Reihenfolge ist) welche sie in den Stapel geschoben wurden). Wird es, da es keine Nebenwirkungen aufweist, darauf verzichten, den Stapel während der Iteration zu platzen?

Eine einfache Frage, und ich würde Ja und Ja annehmen, aber eine, die so einfach ist, dass die Suche große Mengen an LINQ- und Stack-bezogenen Antworten hervorbringt, von denen keines der unzähligen Ergebnisse, die ich durchsucht habe, diesen Fall speziell beantwortet hat.

Antworten

1 AndrewH Dec 08 2020 at 17:24

Ja.

Das folgende Experiment zeigt, dass es der LIFO-Reihenfolge des Stapels folgt.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class DoesLinqIterateAStackInLifo
{
    public static void Main()
    {
        var stack = new Stack<char>();
        stack.Push('s');
        stack.Push('e');
        stack.Push('Y');
        Console.WriteLine(stack.Aggregate(new StringBuilder(), (builder,letter) => builder.Append(letter)));
        Console.WriteLine(string.Join("",stack.ToList()));      
        if(stack.Count==3) 
        {
            Console.WriteLine("And it will not pop the stack");
        }       
    }
}

Ausgabe:

Yes
Yes
And it will not pop the stack