public static IObservable <CollectionAddRemoveEvent <T> > ObserveCurrentAddRemove <T>(this IReadOnlyReactiveCollection <T> This) => This.Select((x, i) => new CollectionAddRemoveEvent <T>(i, x, true)) .ToObservable() .Concat(This .ObserveAdd() .Select(x => new CollectionAddRemoveEvent <T>(x.Index, x.Value, true)) .Merge(This .ObserveRemove() .Select(x => new CollectionAddRemoveEvent <T>(x.Index, x.Value, false))));