public static Range <T> Sum <T>(this IEnumerable <Range <T> > that) where T : IComparable { Range <T> sum = new Range <T>(); IEnumerator <Range <T> > enumerator = that.GetEnumerator(); while (enumerator.MoveNext()) { sum = sum.Add(enumerator.Current); } return(sum); }
/// <summary> /// Updates the actual range displayed on the axis. /// </summary> private void UpdateActualRange() { Action action = () => { Range <IComparable> dataRange = new Range <IComparable>(); if (ProtectedMaximum == null || ProtectedMinimum == null) { if (Orientation == AxisOrientation.None) { if (ProtectedMinimum != null) { this.ActualRange = OverrideDataRange(new Range <IComparable>(ProtectedMinimum, ProtectedMinimum)); } else { this.ActualRange = OverrideDataRange(new Range <IComparable>(ProtectedMaximum, ProtectedMaximum)); } } else { IEnumerable <Range <IComparable> > values = this.RegisteredListeners .OfType <IRangeProvider>() .Select(rangeProvider => rangeProvider.GetRange(this)); foreach (Range <IComparable> range in values) { dataRange = dataRange.Add(range); } this.ActualRange = OverrideDataRange(dataRange); } } else { this.ActualRange = new Range <IComparable>(ProtectedMinimum, ProtectedMaximum); } }; // Repeat this after layout pass. if (this.ActualLength == 0.0) { #pragma warning disable 4014 this.Dispatcher.RunAsync(CoreDispatcherPriority.High, new DispatchedHandler(action)); #pragma warning restore 4014 } action(); }