我想在点击退出按钮时删除所有标签项 我的代码如下:
foreach (object item in mainTab.Items)
{
TabItem ti = (TabItem)item;
if ("welcomeTabItem" != ti.Name)
{
mainTab.Items.Remove(item);
}
}
但这会产生以下错误
错误 - 收集已修改;枚举操作可能无法执行。
是否存在其他任何方法?
答案 0 :(得分: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);
答案 1 :(得分:5)
您无法在IEnumerables
循环中修改foreach
。 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);
}
}
答案 2 :(得分:4)
您可以使用LINQ
删除此类内容 -
mainTab.Items.RemoveAll(ti => ((TabItem)ti).Name != "welcomeTabItem");
确保在文件顶部添加using System.Linq;
命名空间。
答案 3 :(得分:3)
不允许在Foreach中编辑可枚举
您可以使用以下LINQ代码删除“welcomeTabItem”以外的所有项目:
mainTab.Items.RemoveAll(i => i.Name != "welcomeTabItem");
答案 4 :(得分: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);
}
在枚举时,您无法从集合中删除项目