Ответ 1
Вместо использования .Count() == 0
просто используйте .Count == 0
. Это использует свойство стека, а не метод расширения linq.
Есть ли другой способ, кроме Stack<T>.Count() == 0
, чтобы проверить, является ли Stack<T>
пустым?
Исходя из фона С++/Java, где классы "стека" обычно имеют какой-то выделенный "пустой" метод, например Java - Stack.empty.
Вместо использования .Count() == 0
просто используйте .Count == 0
. Это использует свойство стека, а не метод расширения linq.
Вы также можете создать свой собственный метод расширения
namespace System.Collection.Generic {
public static class SystemEx {
public static bool IsEmpty<T>(this Stack<T> stack) {
return (stack.Count==0);
}
}
Вы можете использовать stack.Any()
. Быстрый, читаемый и стандартный способ для всех объектов IEnumerable<T>
.
Есть три общих подхода, и какой из них вы обычно используете, зависит от вкуса.
if(!stack.Any()) ...
if(stack.Count() == 0) ...
if(stack.Count == 0) ...
Профилирование разных подходов выглядит так:
.Any()
и .Count()
занимают в .Count()
раз больше времени, чем .Count
... и могут работать десятки тысяч раз в миллисекунду. Поэтому .Count > 0
"намного быстрее", но остальные все еще достаточно быстры, чтобы не беспокоиться о них в большинстве случаев. Я бы лично придерживался Any()
так как чувствую, что он читается лучше, но я бы не стал никому отказываться от выбора Count
.