我遇到以下代码的问题:
public static void RestoreToolStripMenuItem(ToolStripMenuItem item, List<string>.Enumerator enumerator )
{
item.Text = enumerator.Current;
enumerator.MoveNext();
if (item.HasDropDownItems)
{
var itemsWithoutSeparators = item.DropDownItems.OfType<ToolStripMenuItem>();
foreach (var child in itemsWithoutSeparators)
{
RestoreToolStripMenuItem(child, enumerator);
}
}
}
在递归调用RestoreToolStripMenuItem之后,重置枚举数(当前属性指向集合的第一个元素)。它只能通过ref传递枚举器来实现。我想知道,为什么这是一个案例?枚举器是一个结构。是什么导致了这个问题,Enumerator结构的可变性?
答案 0 :(得分:2)
是的,结构的变化状态导致了这种情况。
如果按值传递结构,您将在方法中使用它的副本,并且调用代码中的副本不会更改。
答案 1 :(得分:1)
尝试更改变量以键入IEnumerator(Of String),并将其作为该类型传递一次。这将导致它被装箱一次,然后表现为一个类。
答案 2 :(得分:0)
只需从您调用的方法返回已更改的Enumerator结构,并将其分配回原始变量。