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