Когда использовать коллекцию Stack <T>в C #? - PullRequest
7 голосов
/ 07 января 2012

Я понимаю, как работают Stack() и Stack<T>, но я действительно не вижу сценариев, когда массив, List<T> или IEnumerable<T> не является лучшим и более легким выбором.

Может ли кто-нибудь предоставить мне реальный пример использования Stack<T>?

Ответы [ 12 ]

0 голосов
/ 07 января 2012
Функциональность

Stack<T> действительно выглядит как подмножество List<T> (с несколькими переименованными методами), поэтому я согласен, что она сама по себе не кажется самой полезной коллекцией.При внутреннем использовании в алгоритме List<T> может легко заменить его, даже если это может быть несколько менее идиоматичным.

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

Мой вывод таков, что я бы не включил класс Stack<T> в структуру, просто интерфейс IStack<T>.Коллекции BCL обычно выглядят не очень хорошо продуманными.

ConcurrentStack<T>, с другой стороны, кажется гораздо более полезным.

0 голосов
/ 07 января 2012

Я бы сказал, если бы вы моделировали что-то, что концептуально является стеком. Скажем, вы моделируете маленький, но глубокий ящик и кладете в него книги. Это будет следовать парадигме «первым пришел - последним вышел», которая является точкой стека в целом.

У вас нет списка книг или какого-либо перечисления - у вас есть определенный порядок их ... а именно, противоположный порядку, в котором они были добавлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...