2015-07-28 155 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(); 
相關問題