This small change would give users all the LINQ flexibility.
In NT7 I used DataSeries extension to circumvent it, but if there is no important reason why Series<T> doesn't implement IEnumerable I would ask for this change to happen.
Here are the extensions I wrote for NT7:
public static class DataSeriesExtensions { // Example Use: var test = MyPlot.ToDoubleArray(); public static double[] ToDoubleArray(this DataSeries series) { if (series == null) return null; int seriesCount = series.Count; double[] tempArray = new double[seriesCount]; for (int i = 0; i < seriesCount; i++) tempArray[i] = series[i]; return tempArray; } // Example Use: var test = MyPlot.ToDoubleArray(14); public static double[] ToDoubleArray(this DataSeries series, int window) { if (series == null) return null; double[] tempArray = new double[window]; for (int i = 0; i < window; i++) tempArray[i] = series[i]; return tempArray; } // Example Use: var test = MyPlot.ToEnumerable<double>(); // The non windowed version doesn't work properly on bar series, eg. Close, Open, etc.) // As a workaround use: var test = Close.ToEnumerable<double>(CurrentBar); public static IEnumerable<T> ToEnumerable<T>(this IDataSeries series) //where T: IConvertible { if (series == null) return null; int window = series.Count; T[] tempArray = new T[window]; for (int i = 0; i < window; i++) { tempArray[i] = (T)Convert.ChangeType(series[i], typeof(T)); } return tempArray; } // Example Use: var test = MyPlot.ToEnumerable<double>(14); public static IEnumerable<T> ToEnumerable<T>(this IDataSeries series, int window) //where T: IConvertible { if (series == null) return null; T[] tempArray = new T[window]; for (int i = 0; i < window; i++) { tempArray[i] = (T)Convert.ChangeType(series[i], typeof(T)); } return tempArray; } }
Comment