2010-10-23 45 views
1

我有一些需要創建並添加到數組的對象。但是,從長遠來看,下面的代碼看起來很髒並且很難維護。我在想的是,我應該將Name和Value屬性存儲在一個表中,並在運行時構建每個comCommand對象。在運行時構建對象

但是,我不完全確定要做到這一點的最佳方法...反射,Activator.CreateInstance或某種對象工廠?

在此先感謝。

var engine = new comCommand() { commandName = "-e", commandValue = "PNetTNative" }; 
var outputFile = new comCommand() { commandName = "-f", commandValue = OutputFile }; 
var groupSize = new comCommand() { commandName = "-GroupSizeParamInput1ParamsIn", commandValue = GroupSize }; 
var pagesPerSheet = new comCommand() { commandName = "-PagesPerSheetParamInput1ParamsIn", commandValue = PagesPerSheet }; 
var outputFileName = new comCommand { commandName = "-OutputFileNameParamInput1ParamsIn", commandValue = OutputFileName }; 
var duplex = new comCommand { commandName = "-DuplexParamInput1ParamsIn", commandValue = Duplex }; 
var processId = new comCommand { commandName = "-ProcessIDParamInput1ParamsIn", commandValue = ProcessID }; 

var request = new comRunWorkFlowReq(); 
request.command = new[] { engine, outputFile, groupSize, pagesPerSheet, outputFileName, duplex, processId }; 
+2

如果你只是聲明瞭一個合適的構造函數,那麼你就可以做'new comCommand(「 - e」,「PNetTNative」)'。另外,小寫的類名完全是非標準的。真的應該是'ComCommand'。 – 2010-10-23 22:12:51

+0

感謝您的建議。我同意你的意見,但ComCommand課程並未由我執行。 – 2010-10-23 23:14:39

回答

1

創建命令的構造函數(如柯克建議),並保持它作爲您有:多個comCommand( 「 - E」, 「PNetTNative」)等電話。

保持它在代碼中的原因是你得到編譯器時間類型和錯誤檢查......是的,你可以在運行時(各種方法)做到這一點,但只有7個聲明,最好是保持在編譯時。

+0

我不止這7個聲明。我只是把所有方法的一小部分。感謝您的建議 – 2010-10-26 12:24:01

+0

那麼,只要項目的「列表」是靜態的(在運行時不會改變),我的首選項仍然是保存在可以編譯的代碼中。根據你迄今爲止給出的代碼判斷,它似乎是一個命令行工具的接口,所以你可以直接在代碼中直接實現它 – Dekker500 2010-10-26 13:07:03

+0

你明白了......我是一個自動化過程運行這個第三方應用程序。我很欣賞這個建議。 – 2010-10-26 14:17:47