使用变量创建[泛型类型]的新实例

本文关键字:新实例 实例 变量 创建 泛型类型 | 更新日期: 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();