2015-07-28 184 views
0
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(); 
+0

如果你开始使用MVVM,你会发现你的代码变得更干净,更简单,更可测试,更易于维护。 –

回答

1

一个简单的解决方案是确保每一个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,好点:我绝对是过度工程。 –

1

莫非您通过传入报告名称来使reportDelete类更通用?

public class reportDelete 
{ 
    public string ReportName { get; private set; } 

    public reportDelete(string reportName) 
    { 
     ReportName = reportName; 
    } 
} 

... 

Preview.DocumentSource = reportDelete(combobox.Text); 
report.CreateDocument(); 
相关问题