Example #1
0
        public void Clear()
        {
            var itemsWhichCanNotBeRemoved = new List <T>();
            var beforeHandler             = Volatile.Read(ref ItemRemoving);

            foreach (var item in this)
            {
                if (beforeHandler != null)
                {
                    var eventArgs = new CancelableItemEventArgs <T>(item);
                    beforeHandler(this, eventArgs);
                    if (eventArgs.IsCanceled)
                    {
                        itemsWhichCanNotBeRemoved.Add(item);
                    }
                }
            }
            if (itemsWhichCanNotBeRemoved.Count == 0)
            {
                var copy = new List <T>(this);
                ClearImplementation();
                var afterHandler = Volatile.Read(ref ItemRemoved);
                foreach (var item in copy)
                {
                    afterHandler?.Invoke(this, new ItemEventArgs <T>(item));
                }
            }
            else
            {
                throw new ItemsCantBeRemovedException <T>(itemsWhichCanNotBeRemoved);
            }
        }
Example #2
0
        public void Add(T item)
        {
            var beforeHandler = Volatile.Read(ref ItemAdding);

            if (beforeHandler != null)
            {
                var eventArgs = new CancelableItemEventArgs <T>(item);
                beforeHandler(this, eventArgs);
                if (eventArgs.IsCanceled)
                {
                    return;
                }
            }
            AddImplementation(item);
            Volatile.Read(ref ItemAdded)?.Invoke(this, new ItemEventArgs <T>(item));
        }
Example #3
0
        public Boolean Remove(T item)
        {
            var beforeHandler = Volatile.Read(ref ItemRemoving);

            if (beforeHandler != null)
            {
                var eventArgs = new CancelableItemEventArgs <T>(item);
                beforeHandler(this, eventArgs);
                if (eventArgs.IsCanceled)
                {
                    return(false);
                }
            }
            Boolean result = RemoveImplementation(item);

            Volatile.Read(ref ItemRemoved)?.Invoke(this, new ItemEventArgs <T>(item));
            return(result);
        }