Вы можете сделать это, используя отражение , но IMO оно слишком хрупкое: оно вводит невидимую зависимость от имени вызываемого вами метода.
// Assuming that the method is static, you can access it like this:
var namedReportMethod = "MyReport1";
var reportMethod = typeof(ReporterClass).GetMethod(namedReportMethod);
var res = reportMethod.Invoke(null, new object[] {reportArg1, reportArg2});
Лучшим подходом было бы определить делегат на основе вашего метода и сохранить его в структуре / классе вместо имени метода.
delegate void ReportDelegate(int param1, string param2);
class Runner {
public static void RunReport(ReportDelegate rd) {
rd(1, "hello");
}
}
class Test {
static void TestReport(int a, string b) {
// ....
}
public static void Main(string[] args) {
Runner.RunReport(TestReport);
}
}
Вместо определения собственных типов делегатов вы можете использовать предопределенные типы на основе Action<T1,T2,...>
или Func<T1,T2,R>
, в зависимости от необходимости возвращать значения из отчетов.