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, и это будет лучшим выбором.