2014-09-09 9 views
12

Gibt es eine andere Möglichkeit, außer Stack<T>.Count() == 0, um zu überprüfen, ob Stack<T> leer ist?Wie überprüft man, ob ein Stack <T> leer ist

Kommen aus C++/Java-Hintergrund, wo "Stack" -Klassen in der Regel eine Art von dedizierten "ist leer" -Methode wie Java - Stack.empty.

+1

https://answers.yahoo.com/question/index?qid=20120403003525AAWPFlt –

+0

Imho das ist eine sehr lesbare und effizient erstellen. Also nein, ich kenne keinen besseren Weg, da ['Peek'] (http://msdn.microsoft.com/en-us/library/1w32446f (v = vs.110) .aspx) keine Option ist. –

+2

Sie könnten 'Any' verwenden, glaube ich. 'var notEmpty = stack.Any()'. Um klar zu sein, wie @TimSchmelter unten sagt, ist dies nicht so effektiv wie die Verwendung der 'Count'-Eigenschaft. –

Antwort

23

Verwenden Sie statt .Count() == 0 einfach .Count == 0. Dies verwendet die stack-Eigenschaft und nicht die linq-Erweiterungsmethode.

+6

Nur zur Information: In der Praxis ist das egal, weil 'Stack ' 'ICollection' implementiert und in diesem Fall' Enumerable.Count' einfach auch die 'Count'-Eigenschaft verwendet. – Dirk

2

Sie können Ihre eigene Erweiterungsmethode zu

namespace System.Collection.Generic { 
    public static class SystemEx { 
     public static bool IsEmpty<T>(this Stack<T> stack) { 
      return (stack.Count==0); 
     }  
    } 
+0

Einige Erweiterungen sind nur überflüssig. Dies ist einer von ihnen. Es verbirgt nur die Implementierung, die nicht komplex ist. Wir müssen also immer schauen, warum die Methode überhaupt existiert, vielleicht gibt es ein wichtiges Detail. –

+0

Ich stimme dir zu, aber wir diskutieren nicht, ob es bequem ist oder nicht, nur wenn es auf andere Weise gemacht werden kann. ;) – Blau