[编辑:我加了很多细节,对这个问题,以使其更清晰,为什么我需要通过引用传递枚举]通过引用的CreateInstance传递参数
我正在写一些代码,解析由命令和参数组成的列表。并非所有命令都具有相同数量的参数。例如,可以将清单 -
command1,
100,
command2,
54,
42,
71,
command3,
10,
31,
command1,
82,
command3,
102,
87
(请注意,某些命令可能有是非整数参数),我通过使用列表枚举数据的列表迭代
。每个命令都有它自己的类,它能够从列表中解析命令的参数(并执行一系列与此命令相关的其他活动,而这些活动并不需要用于此示例)。
我有一个命令连接到他们班一本字典 -
var map = new Dictionary<string, Type>
{
{ "command1", typeof(Command1Class) },
{ "command2", typeof(Command2Class) },
{ "command3", typeof(Command3Class) },
};
所以我的基本的解析循环如下 -
var enumerator = data.GetEnumerator();
while (enumerator.MoveNext())
{
var command = (string)enumerator.Current;
codeBlock.AddBlock((Block)Activator.CreateInstance(map[command], new object[] { enumerator }));
}
(所有命令类都从相同的基本类型派生的,块)
因此,在每个命令类的构造函数中,它可以解析命令采用的参数的数量,并且在返回到主循环时,枚举器将具有大量e通过这些参数继续前进。
例如 -
class Command1Class : Block
{
string param;
public Command1Class(ref List<object>.Enumerator enumerator)
{
enumerator.MoveNext();
param = (string)enumerator.Current;
}
}
但是我发现它枚举器仅在构造函数中本地修改。因此,从构造函数返回时,枚举器仍然指向命令,而不是继续执行命令需要的参数。
如果我这样做非动态使用下面的风格,它的工作原理与枚举指向下一个命令时,它从构造函数返回预期 -
new SomeClass(ref enumerator)
所以我不知道为什么我的代码与CreateInstance不能按预期工作,我如何动态地做到这一点?
你预期会发生什么? – Evk
“预期”是什么? – Crowcoder
你是对的。我已经添加了更多信息来说明这样做的原因以及预期结果更加清晰 – Rok