c# - Enumerator 结构的可变性

标签 c# .net struct ienumerable

我对以下代码有疑问:

  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/

相关文章:

c# - 在 C# 中将 .ddd(数字行驶记录仪)文件读取/解析为 XML

c# - .NET 为 Unix 系统(Icinga 或 Nagios)编写文本文件

c# - 如何对 WebBrowser 附加属性进行单元测试?

c# - C#中同一局域网上的MAC地址到IP地址

c# - 有没有一种方法可以在不编写一长串 OR 运算符的情况下根据字符串列表检查字符?

c# - 在 .net5/vNext/MVC6 中添加新的路由约束

.net - 如何在 PowerShell 中更改列表框的字体大小

c - 类型结构的不完整定义

c++ - 使用数组和某些方法来 memcpy struct 是否安全?

c# - 结构常量还是类?