LINQ iterará una pila en orden LIFO [duplicado]

Dec 08 2020

¿Los métodos LINQ iterarán el contenido de una pila (y en mi caso específico, Stack ) en el orden LIFO (último en entrar, primero en salir) (es decir, el mismo orden en el que se obtendría cada elemento que es el inverso del orden en que fueron empujados a la pila). Además, al estar libre de efectos secundarios, ¿se abstendrá de hacer estallar la pila mientras la itera?

Una pregunta simple, y asumiría que sí y sí, pero una tan simple que la búsqueda produjo grandes volúmenes de respuestas relacionadas con LINQ y Stack, de las cuales ninguno de los innumerables resultados que examiné respondió específicamente a este caso.

Respuestas

1 AndrewH Dec 08 2020 at 17:24

Si.

El siguiente experimento muestra que sigue el orden LIFO de Stack.

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");
        }       
    }
}

Salida:

Yes
Yes
And it will not pop the stack