[編輯:我加了很多細節,對這個問題,以使其更清晰,爲什麼我需要通過引用傳遞枚舉]通過引用的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