LINQ va-t-il itérer une pile dans l'ordre LIFO [dupliquer]

Dec 08 2020

Les méthodes LINQ itéreront-elles le contenu d'une pile (et dans mon cas spécifique Stack ) dans l'ordre LIFO (dernier entré, premier sorti) (c'est-à-dire: le même ordre dans lequel on obtiendrait le saut de chaque élément qui est l'inverse de qu'ils ont été poussés dans la pile). De plus, étant sans effet secondaire, s'abstiendra-t-il de faire sauter la pile tout en l'itérant?

Une question simple, et je suppose que oui et oui, mais une si simple que la recherche a produit de grands volumes de réponses liées à LINQ et Stack dont aucun des innombrables résultats que j'ai consultés ne répondait spécifiquement à ce cas.

Réponses

1 AndrewH Dec 08 2020 at 17:24

Oui.

L'expérience suivante montre qu'elle suit l'ordre LIFO de la pile.

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

Production:

Yes
Yes
And it will not pop the stack