using System.Collections.Generic; namespace Utility { /// /// Ermöglicht das erstellen einer Variable mit gestapeltem Wert, sodass überschreiben und zurücksetzen möglich ist. /// public class ValueStack : Stack { /// /// Erzeugt eine neue Instanz des ValueStacks und initialisiert diesen mit dem Standardwert. /// public ValueStack() { Push(default); } /// /// Erzeugt eine neue Instanz des ValueStacks und initialisiert diesen mit dem gegebenen Wert. /// /// Der Wert, mit dem der Stack initialisiert werden soll. public ValueStack(T initialValue) { Push(initialValue); } /// /// Setzt den Wert des Stacks auf den gegebenen Wert. /// /// Der Wert, auf den der Stack gesetzt werden soll. /// Der gegebene Wert um Verkettung von Expression zu ermöglichen. public new T Push(T value) { base.Push(value); return value; } /// /// Popt den obersten Wert des Stacks, wenn der Stack nur noch einen Wert enthält, wird nicht gepopt und dieser zurückgegeben. /// public new T Pop() { if (Count == 1) return Peek(); return base.Pop(); } /// /// Gibt den aktuellen Wert des ValueStacks zurück. /// public T CurrentValue() => Peek(); public static implicit operator T(ValueStack stack) => stack.CurrentValue(); } }