【问题标题】:LINQ to delete UIElement in SilverLight ChildrenLINQ 删除 SilverLight Children 中的 UIElement
【发布时间】:2010-11-05 02:51:33
【问题描述】:
foreach (UIElement el in GridBoard.Children.ToList())
{
   if (el is Ellipse)
   {
       GridBoard.Children.Remove(el);
   }
}

是否有任何 LINQ 等效于执行上述操作?如果是,可以提供代码吗?谢谢

【问题讨论】:

    标签: .net linq silverlight-3.0 uielement


    【解决方案1】:

    LINQ 用于查询集合而不是产生副作用。根据 MSDN,Silverlight 不支持 List<T>RemoveAll 方法,但支持 RemoveRemoveAt 方法,否则您可以编写:GridBoard.Children.ToList().RemoveAll(el => el is Ellipse);

    您可以按如下方式使用 LINQ:

    var query = GridBoard.Children.OfType<Ellipse>().ToList();
    foreach (var e in query)
    {
        GridBoard.Children.Remove(e);
    }
    

    或者,您可以反向遍历您的列表并使用RemoveAt,这将产生比使用Remove 更好的性能:

    for (int i = GridBoard.Children.Count - 1; i >= 0; i--)
    {
        if (GridBoard.Children[i] is Ellipse)
            GridBoard.Children.RemoveAt(i);
    }
    

    所以它与你所拥有的并没有太大的不同。也许RemoveAll 支持将使其进入未来的 Silverlight 版本,这将是最佳选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多