void OnSourceCollectionChanged(IReadOnlyCollection <TSource> removedItems, IReadOnlyCollection <TSource> addedItems)
            {
                List <TResult> removedResults = new List <TResult>();

                foreach (TSource removedSource in removedItems)
                {
                    for (int i = 0; i < inputCollections.Count; i++)
                    {
                        var inputCollection = inputCollections[i];
                        if (EqualityComparer <TSource> .Default.Equals(inputCollection.source, removedSource))
                        {
                            inputCollection.AddResultsToList(removedResults);
                            inputCollection.UnregisterEvent();
                            inputCollections.RemoveAt(i);
                            break;
                        }
                    }
                }
                List <TResult> addedResults = new List <TResult>();

                foreach (TSource addedSource in addedItems)
                {
                    var inputCollection = new InputCollection(this, addedSource);
                    inputCollection.AddResultsToList(addedResults);
                    inputCollection.RegisterEvent();
                    inputCollections.Add(inputCollection);
                }
                OnCollectionChanged(removedResults, addedResults);
            }