using System; using System.Linq; namespace Sharp7.Rx.Basics { internal class DisposableItem : IDisposable { private readonly Action disposeAction; bool disposed; public DisposableItem(IObservable observable, Action disposeAction) { this.disposeAction = disposeAction; Observable = observable; } public IObservable Observable { get; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposed) return; if (disposing) { disposeAction(); } disposed = true; } } }