使用变量创建[泛型类型]的新实例
本文关键字:新实例 实例 变量 创建 泛型类型 | 更新日期: 2023-09-27 18:05:03
if (comboBox.Text == "Report 1 Name")
{
Reports.reportDelete report = new Reports.reportDelete();
Preview.DocumentSource = report;
report.CreateDocument();
}
else
{
Reports.reportDelete2 report = new Reports.reportDelete2();
Preview.DocumentSource = report;
report.CreateDocument();
}
假设我有100个reportDelete,这种编写代码的方式不是最优的。我正在考虑制作一个基于组合框的变量名称的函数。文本并以某种方式传递它以创建一个新实例。唯一的问题是,我不确定我怎么能做到这一点,或者它是否可能。
假设我想完成什么。
Reports.(combobox.Text) report = new Reports.(comboboxText());
Preview.DocumentSource = report;
report.CreateDocument();
是否可以通过传入报告名称来使reportDelete类更通用?
public class reportDelete
{
public string ReportName { get; private set; }
public reportDelete(string reportName)
{
ReportName = reportName;
}
}
...
Preview.DocumentSource = reportDelete(combobox.Text);
report.CreateDocument();
一个简单的解决方案是确保每个ReportDelete
类实现一个IReportDelete
接口,并使用一个Dictionary
:
private readonly Dictionary<string, IReportDelete> ReportFactory =
new Dictionary<string, IReportDelete>
{
{ "Report 1 Name", new ReportDelete1() },
{ "Report 2 Name", new ReportDelete2() },
...
};
然后将if
的序列替换为:
var report = ReportFactory[comboBox.Text];
Preview.DocumentSource = report;
report.CreateDocument();