O LINQ irá iterar uma pilha no pedido LIFO [duplicado]

Dec 08 2020

Os métodos LINQ irão iterar o conteúdo de uma Pilha (e no meu caso específico Stack ) na ordem LIFO (Último a Entrar, Primeiro a Sair) (ou seja: a mesma ordem que obteríamos exibindo cada elemento que é o inverso da ordem em que foram colocados na pilha). Além disso, sendo livre de efeitos colaterais, ele se absterá de estourar a pilha durante a iteração?

Uma pergunta simples, e eu presumiria Sim e Sim, mas tão simples que a pesquisa produziu grandes volumes de respostas relacionadas ao LINQ e Stack, dos quais nenhum dos inúmeros resultados que pesquisei respondeu especificamente a este caso.

Respostas

1 AndrewH Dec 08 2020 at 17:24

Sim.

O experimento a seguir mostra que ele segue a ordem LIFO da pilha.

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

Resultado:

Yes
Yes
And it will not pop the stack