2010-10-23 125 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