Sum*_*ngh 1 c# lambda delegates switch-statement
我有一个方法,它使用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...
}
Run Code Online (Sandbox Code Playgroud)
我知道随着越来越多的报告添加到系统中,该switch语句将继续增加。是否有其他方法可以实现这一目标?...代表?... Lambda?我所知道的是,我所有的GenerateReport方法都将具有相同的签名。
正如SLaks所说,您可以将交换机重构为字典。我假设您的三个输入参数是字符串。根据需要进行调整:
// the dictionary value is a function delegate with three string input
// parameters and a string result
var _generateReport = new Dictionary<string, Func<string, string, string, string>>()
{
{"A", GenerateReportA},
{"B", GenerateReportB},
{"C", GenerateReportC},
{"D", GenerateReportD},
{"E", GenerateReportE}
...
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以将switch语句重写为
if (_generateReport.ContainsKey(reportName))
_generateReport[reportName].Invoke(reportName, model, language);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |