public static MaxTracker <TValue> TrackMax <TValue>(this ReadOnlyObservableCollection <TValue> source, TValue?whenEmpty) where TValue : struct, IComparable <TValue> { return(new MaxTracker <TValue>(source, source.ObserveCollectionChangedSlim(false), whenEmpty)); }