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

Sea*_*son 1 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);
    }
Run Code Online (Sandbox Code Playgroud)

RadControlSave.SavePane(窗格)修改RadControlStates.PaneStates集合.在这种情况下编写此代码有更好的方法吗?

编辑:每个人都请阅读我在字面上写的内容.Jimmy发布了一个我没有的明显解决方案 - 在迭代之前创建集合的副本,以便RadControlSave不会修改正在迭代的集合.

Jim*_*mmy 5

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

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