2010-11-05 3 views

ответ

1

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

+0

большое спасибо! – TechTravelThink