79252809

Date: 2024-12-04 21:45:23
Score: 1
Natty:
Report link

Thank you everyone.. with your input I came up with this

public class MyStack
{
    public IDisposable Transaction()
    {
        return new UndoStackTransaction(this);
    }

    public void BeginCommit()
    {
    }

    public void EndCommit()
    {
    }

    public class UndoStackTransaction : IDisposable
    {
        private MyStack _myStack;

        public UndoStackTransaction(MyStack undoStack)
        {
            _myStack = undoStack;
            _myStack.BeginCommit();
        }

        ~UndoStackTransaction() => Dispose(false);

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            _myStack.EndCommit();
        }
    }
}

Which allows me to do this....

   using (var transaction = stack.Transaction())
   {
       //Do Something
   }
Reasons:
  • Blacklisted phrase (0.5): Thank you
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Stetson