如何从字典中删除所有元素?

10 .net c#

我使用以下代码从字典中删除所有元素:

internal static void RemoveAllSourceFiles()
        {
            foreach (byte key in taggings.Keys)
            {
                taggings.Remove(key);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这不起作用,因为InvalidOperationException抛出了.我知道这是因为在迭代它时修改了集合,但我怎么能改变它呢?

Mar*_*ell 33

一种更简单(也更有效)的方法:

taggings.Clear();
Run Code Online (Sandbox Code Playgroud)

是的,错误是因为故意更改数据会破坏迭代器.


Unm*_*kar 6

请尝试使用Clear方法.

internal static void RemoveAllSourceFiles()
        {
           taggings.Clear();
        }
Run Code Online (Sandbox Code Playgroud)

更新:正如Marc指出的那样,在修改它时,你不能继续迭代一个集合,因为迭代器无法恢复.有关详细信息,请阅读此SO问题的答案.

为什么枚举通过集合抛出异常但循环遍历其项目却不会

  • 更准确地说,你不能在修改之后继续*迭代它; 微妙的差异,也许......但你非常*可以*修改集合. (5认同)
  • 谢谢Marc指出来.是的,微妙但重要的区别. (2认同)