2

单击注销按钮时,我想删除所有选项卡项我的代码如下

foreach (object item  in mainTab.Items)
{
  TabItem ti = (TabItem)item;
  if ("welcomeTabItem" != ti.Name)
    {
      mainTab.Items.Remove(item);
    }
}

但这会产生以下错误

error-Collection 被修改;枚举操作可能无法执行。

是否存在其他方法?

4

5 回答 5

6

您可以获得所需的项目,然后清除控件并重新添加该项目。

// Note that `First` will throw an exception if the item isn't found.
TabItem ti = mainTab.Items.First(t => t.Name == "WelcomTabItem");
mainTab.Items.Clear();
mainTab.Items.Add(ti);

或者,如果“WelcomeTabItem”可能不在Items

TabItem ti = mainTab.Items.FirstOrDefault(t => t.Name == "WelcomTabItem");
mainTab.Items.Clear();
if(ti != null)
    mainTab.Items.Add(ti);
于 2013-03-27T07:42:31.620 回答
5

您不能IEnumerablesforeach循环中编辑。insted 使用for循环。

for (int i = mainTab.Items.Count -1; i >=0; i--)
{
  TabItem ti = (TabItem)mainTab.Items[i];
  if ("welcomeTabItem" != ti.Name)
   {
     mainTab.Items.Remove(ti);
   }
}
于 2013-03-27T07:40:18.610 回答
4

您可以使用LINQ删除这样的项目 -

mainTab.Items.RemoveAll(ti => ((TabItem)ti).Name != "welcomeTabItem");

确保using System.Linq;在文件顶部添加命名空间。

于 2013-03-27T07:50:28.537 回答
3

不允许在 Foreach 中编辑 Enumerable

您可以使用以下 LINQ 代码来删除除“welcomeTabItem”之外的所有项目:

mainTab.Items.RemoveAll(i => i.Name != "welcomeTabItem");
于 2013-03-27T07:49:08.340 回答
1

使用以下代码:

var itemsToRemove = new List(TabItem);

foreach (object item  in mainTab.Items)
{
  TabItem ti = (TabItem)item;
  if ("welcomeTabItem" != ti.Name)
   {
     itemsToRemove.Add(item);
   }
}

foreach (var itemToRemove in itemsToRemove)
{
    mainTab.Items.Remove(itemToRemove);
}

枚举时不能从集合中删除项目

于 2013-03-27T07:42:18.130 回答