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