/// <summary> /// Clones the current property set with an optional mutator and then pushes it onto the stack /// </summary> /// <param name="mutator">Callback that can modify the cloned property set</param> public void PushPropertySet(Action <IPropertySet> mutator) { var newPropertySet = CurrentPropertySet.Clone(); mutator?.Invoke(newPropertySet); _propertySetStack.Push(newPropertySet); }