c# - 编写此代码的更好方法而不是 2x foreach?

标签 c#

    List<CormantRadPane> panesToSave = new List<CormantRadPane>();

    foreach (KeyValuePair<string, RadPaneSetting> paneState in RadControlStates.PaneStates)
    {
        CormantRadPane pane = Utilities.FindControlRecursive(Page, paneState.Key) as CormantRadPane;
        panesToSave.Add(pane);
    }

    foreach (CormantRadPane pane in panesToSave)
    {
        RadControlSave.SavePane(pane);
    }

RadControlSave.SavePane(pane) 修改 RadControlStates.PaneStates 集合。在这种情况下,有没有更好的方法来编写这段代码?

编辑:每个人都请阅读我在上面写的字面意思。 Jimmy 发布了一个我没有考虑过的明显解决方案——在迭代之前创建集合的副本,这样 RadControlSave 就不会修改正在迭代的集合。

最佳答案

一种方法是在 PaneStates 上调用 ToArray()(制作一个副本,因为您不能修改 foreach 中的序列)

foreach(var state in RadControlStates.PaneStates.ToArray()) {
    var pane = Utilities.FindControlRecursive(Page, state.Key) as CormantRadPane;
    RadControlSave.SavePane(pane);
}

关于c# - 编写此代码的更好方法而不是 2x foreach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5302173/

相关文章:

javascript - 在发布到 API 之前更改数组 javascript 中的一些值

c# - 如何清除wpf中 Canvas 的内容?

c# - 如何从看起来像 "process name"+ 地址的指针读取?

C# 接口(interface)和泛型列表

c# - 比较 JSON 结构

C# XPath Soap,如何导航到嵌入式节点

c# - 写入后重新加载app.config

c# - 在 C Sharp 中使用带有正则表达式的替换函数

c# - 我想每秒显示数字时钟来刷新TextBox(Windows App)

C# 异步套接字服务器未收到来自 Java 客户端的响应