LINQ для удаления UIElement в SilverLight Children - PullRequest
0 голосов
/ 05 ноября 2010
foreach (UIElement el in GridBoard.Children.ToList())
{
   if (el is Ellipse)
   {
       GridBoard.Children.Remove(el);
   }
}

Существует ли какой-либо эквивалент LINQ для выполнения вышеупомянутого? Если да, можете ли вы предоставить код? Спасибо

1 Ответ

1 голос
/ 05 ноября 2010

LINQ используется для запроса коллекций, а не для побочных эффектов. Согласно MSDN Silverlight не поддерживает метод List<T> RemoveAll, но поддерживает методы Remove и RemoveAt, в противном случае вы могли бы написать: 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, и это будет лучшим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...