bullets.RemoveAll(bullet => bullet.Offscreen());
Редактировать: Чтобы сделать эту работу как есть в Silverlight, добавьте следующий метод расширения в ваш проект.
Как и List<T>.RemoveAll
, этот алгоритм имеет O (N), где N - длина списка, а не O (N * M), где M - количество элементов, удаленных из списка. Поскольку это метод расширения с тем же прототипом, что и в методе RemoveAll
, который используется в средах, отличных от Silverlight, встроенный будет использоваться при его наличии, и этот метод будет беспрепятственно использоваться для сборок Silverlight.
public static class ListExtensions
{
public static int RemoveAll<T>(this List<T> list, Predicate<T> match)
{
if (list == null)
throw new NullReferenceException();
if (match == null)
throw new ArgumentNullException("match");
int i = 0;
int j = 0;
for (i = 0; i < list.Count; i++)
{
if (!match(list[i]))
{
if (i != j)
list[j] = list[i];
j++;
}
}
int removed = i - j;
if (removed > 0)
list.RemoveRange(list.Count - removed, removed);
return removed;
}
}