Функциональность
Stack<T>
действительно выглядит как подмножество List<T>
(с несколькими переименованными методами), поэтому я согласен, что она сама по себе не кажется самой полезной коллекцией.При внутреннем использовании в алгоритме List<T>
может легко заменить его, даже если это может быть несколько менее идиоматичным.
Обеспечение поведения стека необходимо только в том случае, если оно открыто для общественности.Но в этом случае, как правило, лучше представить какую-то оболочку над внутренней коллекцией, так что она тоже не очень полезна для этого. Я бы наверняка нашел применение для интерфейса IStack<T>
, но не так сильнодля простого класса коллекции Stack<T>
.
Мой вывод таков, что я бы не включил класс Stack<T>
в структуру, просто интерфейс IStack<T>
.Коллекции BCL обычно выглядят не очень хорошо продуманными.
ConcurrentStack<T>
, с другой стороны, кажется гораздо более полезным.