Что касается отражения, params array
- это просто массив с причудливым синтаксическим сахаром.Вы можете решить непосредственную проблему для большинства ваших методов, настроив код следующим образом:
double[] @parameters = (from t in ParametersOfMethod.Split(';') where t != "" select Convert.ToDouble(t)).ToArray();
i.Invoke(null, new[] { @parameters});
Суть этого в том, что params array
- это всего лишь один параметр во время выполнения, и возможностьдобавить к ней переменное количество значений - это просто тонкость, которую выполняет компилятор.
Вы можете подтвердить это с помощью следующего фрагмента кода:
void Main()
{
var parameterCount = typeof(Test).GetMethod("Foo").GetParameters().Count();
Console.WriteLine(parameterCount); // Output: 2
}
// Define other methods and classes here
public static class Test
{
public static void Foo(double x, params double[] y)
{}
}
Если вам нужно вызвать функциюкоторый использует params array
с предоставленными пользователем значениями, когда params array
не является единственным параметром, вам нужно получить счетчик параметров метода и выяснить, где на самом деле начинается массив, а затем обернуть вещи соответствующим образом.