Вы уже получили довольно хорошие ответы. Позвольте мне предоставить некоторую полезную информацию относительно его дизайна, чтобы помочь вам лучше понять, как его можно использовать. Обратите внимание, что нет метода Pop
. Это потому, что дизайнеры хотели помешать вам выполнить следующую небезопасную последовательность операций. Это небезопасно, потому что последовательность вызовов свойства Count
и гипотетического метода Pop
не является атомарной, несмотря на то, что сбор выставляется как поточно-ориентированный.
while (stack.Count > 0)
{
stack.Pop();
}
Для согласования этого общего случая использования разработчики использовали метод TryPop
. Это, по сути, позволяет переписать вышеизложенное, как показано ниже. На этот раз код безопасен.
object item;
while (stack.TryPop(out item))
{
// Do something with the item here.
}
Следствие моего первого примера также существует с методом Push
. Следующий код (который на этот раз допустим) также небезопасен.
if (stack.Count < MAX_ITEMS)
{
stack.Push(...);
}
Последний пример не так распространен, как предыдущий, и, вероятно, поэтому разработчики не добавили CAS -подобную эквивалентную операцию TryPush
. Возможно, в будущем выпуске, который будет нам доступен.