我对以下代码有疑问:
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 结构的可变性?
最佳答案
是的,这是结构状态的变化导致的。
如果按值传递结构,您将在方法中使用它的副本,调用代码中的副本不会改变。
关于c# - Enumerator 结构的可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165556/