使用变量创建一个[泛型类型]的新实例
问题描述:
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的,这种编写这种代码的方式是不是最优的。我正在考虑制作一个基于combobox.Text的变量名的函数,并以某种方式传递它来创建一个新的实例。唯一的事情是我不知道我该怎么做,或者甚至有可能。使用变量创建一个[泛型类型]的新实例
我试图完成什么的psuedo。
Reports.(combobox.Text) report = new Reports.(comboboxText());
Preview.DocumentSource = report;
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
“序列s的:
var report = ReportFactory[comboBox.Text];
Preview.DocumentSource = report;
report.CreateDocument();
+2
为什么有一个func作为值而不仅仅是实例? –
+0
@AshBurlaczenko,好点:我绝对是过度工程。 –
答
莫非您通过传入报告名称来使reportDelete类更通用?
public class reportDelete
{
public string ReportName { get; private set; }
public reportDelete(string reportName)
{
ReportName = reportName;
}
}
...
Preview.DocumentSource = reportDelete(combobox.Text);
report.CreateDocument();
如果你开始使用MVVM,你会发现你的代码变得更干净,更简单,更可测试,更易于维护。 –