仅当类型为T时才从Panel中删除子项

Nic*_*ick 9 .net c# wpf panel

我有一个WPF Panel(Canvas例如),我想删除它Children只有这些子类型T,例如所有类型Button.

我怎样才能做到这一点?我可以使用LINQ吗?

Dam*_*ith 12

你可以使用LINQ,这是一种做法.

canvas1.Children.OfType<Button>().ToList().ForEach(b => canvas1.Children.Remove(b));
Run Code Online (Sandbox Code Playgroud)

或者你可以遍历所有的Child元素,如果是按钮,则将它们添加到列表中,最后删除它们.不要删除foreach循环内的按钮.

List<Button> toRemove = new List<Button>();
foreach (var o in canvas1.Children)
{
    if (o is Button)
        toRemove.Add((Button)o);
}
for (int i = 0; i < toRemove.Count; i++)
{
    canvas1.Children.Remove(toRemove[i]);
}
Run Code Online (Sandbox Code Playgroud)

LINQ方式更易读,更简单,编码更少.

  • 最后,简单而正确.谢谢!一些关于性能的说明? (2认同)
  • 如果这里有什么问题,请选民下来发表评论 (2认同)