public void ModifyAdd(IConnectionSink sink, T newAbilityInstance, int modificationOwner)
        {
            newAbilityInstance.root    = root;
            newAbilityInstance.carrier = carrier;

            if (savedData != null && savedData.TryGetValue(modificationOwner, out var list))
            {
                var itemIndex = list.FindIndex(item => item.UId() == newAbilityInstance.UId());
                if (itemIndex != -1)
                {
                    // old save item from previous save
                    var item = list[itemIndex];
                    // is no longer needed and can be removed
                    list.RemoveAt(itemIndex);
                    if (list.Count == 0)
                    {
                        savedData.Remove(modificationOwner);
                    }
                }
            }
            else
            {
            }

            collection.Add(newAbilityInstance);
            newAbilityInstance.Enlive();
            sink.AddConnection(new AnonymousDisposable(() => collection.Remove(newAbilityInstance)));
        }
 public IDisposable ModifyAdd(T elem)
 {
     collection.Add(elem);
     return(new AnonymousDisposable(() => collection.Remove(elem)));
 }