Просто заставьте его принять double[]
. Позвольте вызывающему коду втиснуть свои данные в правильный формат или предоставьте перегрузки для других типов данных.
Например, если ваш метод:
public double[] Calculate(double[] aValue, double[] fValue, ...)
{
}
Вы можете предоставить следующие перегрузки:
public double[] Calculate(double aValue, double fValue, ...)
{
return Calculate(new double[]{aValue}, new double[]{fValue}, ...);
}
public double[] Calculate(IEnumerable<double> aValue, IEnumerable<double> fValue, ...)
{
return Calculate(aValue.ToArray(), fValue.ToArray(), ...);
}
Чтобы охватить другие типы данных, вы можете уменьшить количество перегрузок, используя что-то вроде:
public double[] Calculate<T>(T aValue, T fValue) where T : IConvertible
{
return Calculate(aValue.ToDouble(), fValue.ToDouble(), ...);
}
public double[] Calculate<T>(IEnumerable<T> aValue, IEnumerable<T> fValue) where T : IConvertible
{
return Calculate(aValue.Select(x=>x.ToDouble()), fValue.Select(x=>x.ToDouble()), ...);
}
Это должно охватывать все другие примитивные типы данных, что является всем вашим примером.
Если вы сделаете это, код в вашем методе расчета уменьшится до:
public double[] Calculate(double[] aValue, double[] fValue, int numData, int numPts)
{
if (numData < 2) throw new ArgumentOutOfRangeException("numberData must be >= 2.");
if (numPts < 2) throw new ArgumentOutOfRangeException("numberPoints must be >= 2.");
if (numData < numPts) throw new ArgumentOutOfRangeException("numberData must be
>= numPts.");
// do calculation
}
... что намного проще.