using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AIStudio.Wpf.DiagramDesigner.Helpers { public static class IEnumerableExtensions { /// /// Invokes a transform function on each element of a sequence and returns the minimum Double value /// if the sequence is not empty; otherwise returns the specified default value. /// /// The type of the elements of source. /// A sequence of values to determine the minimum value of. /// A transform function to apply to each element. /// The default value. /// The minimum value in the sequence or default value if sequence is empty. public static double MinOrDefault(this IEnumerable source, Func selector, double defaultValue=default(double)) { if (source.Any()) return source.Min(selector); return defaultValue; } /// /// Invokes a transform function on each element of a sequence and returns the maximum Double value /// if the sequence is not empty; otherwise returns the specified default value. /// /// The type of the elements of source. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. /// The default value. /// The maximum value in the sequence or default value if sequence is empty. public static double MaxOrDefault(this IEnumerable source, Func selector, double defaultValue=default(double)) { if (source.Any()) return source.Max(selector); return defaultValue; } public static TResult MinOrDefault(this IEnumerable source, Func selector, TResult defaultValue) { if (source.Any()) { return source.Min(selector); } return defaultValue; } public static TResult MaxOrDefault(this IEnumerable source, Func selector, TResult defaultValue) { if (source.Any()) { return source.Max(selector); } return defaultValue; } /// /// Invokes a transform function on each element of a sequence and returns the minimum Double value /// if the sequence is not empty; otherwise returns the specified default value. /// /// The type of the elements of source. /// A sequence of values to determine the minimum value of. /// A transform function to apply to each element. /// The default value. /// The minimum value in the sequence or default value if sequence is empty. public static double SumOrDefault(this IEnumerable source, Func selector, double defaultValue=default(double)) { if (source.Any()) return source.Sum(selector); return defaultValue; } } }