Я провел некоторое исследование, и я очень удивлен, что не нашел решения для этой простой проблемы.
РЕДАКТИРОВАТЬ: Вопрос о том, возможно ли это или C # не предоставляет какой-либо способ сделать то, что я пытаюсь сделать
В следующем примере я хочу вызвать IWannaBeCalled
из Linker
с параметрами из массива parameters
. В основном эквивалент вызова
IWannaBeCalled(parameters[0], parameters[1]);
но количество параметров не должно быть фиксированным: я хочу иметь возможность добавлять или удалять параметры, не меняя метод Linker
вообще
Вот пример кода:
class Program
{
private void IWannaBeCalled(string arg1, string arg2)
{
// Do stuffs using arg1 and arg2
}
private void Linker(params string[] parameters)
{
// ??
}
static void Main()
{
Linker("Hello", "world");
}
}
Любая помощь будет принята с благодарностью ~
РЕДАКТИРОВАТЬ: Добавление реального кода, в котором мне нужно это сделать:
private PlanningDatas GetPlanningDatas(string dataSourceFunction, params string[] parameters)
{
if (!String.IsNullOrEmpty(dataSourceFunction))
{
string methodName = dataSourceFunction.Split('.').Last();
string classString = dataSourceFunction.Substring(0, dataSourceFunction.Length - methodName.Length - 1);
Type targetType = Type.GetType(classString);
MethodInfo targetMethod = targetType.GetMethod(methodName);
return (PlanningDatas)targetMethod.Invoke(null, parameters);
}
else
{
//return (PlanningDatas)DefaultDataSource( --parameters-- );
}
}
private PlanningDatas DefaultDataSource(string vehiculeModel)
{
// Get the Data
}
Объяснение:
Этот пример взят из проекта mvc, поэтому имя метода задается с помощью ajax-вызова , поэтому оно должно быть строкой.
Если задана строка, она вызывает метод, но dataSourceFunction имеет значение null, она вызывает функцию по умолчанию.
Весь некомментированный код полностью функционален