【发布时间】:2019-08-05 17:51:30
【问题描述】:
我有一个方法,它使用switch语句根据输入参数调用其他方法,如下所示:
switch (reportName)
{
case A:
return GenerateReportA(reportName, model, language);
case B:
return GenerateReportB(reportName, model, language);
case C:
return GenerateReportC(reportName, model, language);
case D:
return GenerateReportD(reportName, model, language);
case E:
return GenerateReportE(reportName, model, language);
and so on...
}
我知道随着越来越多的报告添加到系统中,这个 switch 语句会不断增加。有没有其他方法可以实现这一目标? ...代表? ……拉姆达?我只知道我的所有 GenerateReport 方法都将具有相同的签名。
【问题讨论】:
-
你可以发
Dictionary<string, Func<...>>。 -
您可以使用反射按名称查找方法,即
var method = this.GetType().GetMethod($"GenerateReport{reportName}", null, BindingFlags.Instance | BindingFlags.NonPublic),然后调用它:return (Report)method.Invoke(new object[] { reportName, model, language });。如果这更容易编写,并不意味着它工作得更快。
标签: c# lambda delegates switch-statement