单击注销按钮时,我想删除所有选项卡项我的代码如下
foreach (object item in mainTab.Items)
{
TabItem ti = (TabItem)item;
if ("welcomeTabItem" != ti.Name)
{
mainTab.Items.Remove(item);
}
}
但这会产生以下错误
error-Collection 被修改;枚举操作可能无法执行。
是否存在其他方法?
单击注销按钮时,我想删除所有选项卡项我的代码如下
foreach (object item in mainTab.Items)
{
TabItem ti = (TabItem)item;
if ("welcomeTabItem" != ti.Name)
{
mainTab.Items.Remove(item);
}
}
但这会产生以下错误
error-Collection 被修改;枚举操作可能无法执行。
是否存在其他方法?
您可以获得所需的项目,然后清除控件并重新添加该项目。
// 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);
您不能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);
}
}
您可以使用LINQ
删除这样的项目 -
mainTab.Items.RemoveAll(ti => ((TabItem)ti).Name != "welcomeTabItem");
确保using System.Linq;
在文件顶部添加命名空间。
不允许在 Foreach 中编辑 Enumerable
您可以使用以下 LINQ 代码来删除除“welcomeTabItem”之外的所有项目:
mainTab.Items.RemoveAll(i => i.Name != "welcomeTabItem");
使用以下代码:
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);
}
枚举时不能从集合中删除项目