Nedávno na Twitteru Tomáš Slavíček narazil na to, že v .NET Frameworku na Windows Phone 7 nemá třída List metodu RemoveIf. Tato metoda na vstupu dostane jako parametr funkci, která bere jeden prvek seznamu a vrací boolean. Prvky, pro které tato funkce vrátí true, se ze seznamu smažou.
Tuhle funkci pak použil ve svém výborném článku Vyvíjíme pro WP v XNA: Vykreslení, výběr a pohyb objektů.
Následující implementace funkce RemoveIf má ale jednu drobnou vadu. Pro účely toho článku to vůbec nevadí, ba právě naopak – nemá smysl vysvětlovanou problematiku komplikovat něčím takovým, je lepší začátečníkům naservírovat kód, který je krátký a srozumitelný.
Na druhou stranu – najdete problém, který toto řešení má?
using System;
using System.Collections.Generic;
using System.Linq;
namespace SmartmaniaHra
{
public static class ExtensionMethods
{
public static void RemoveIf<T>(this List<T> list, Func<T, bool> predicate)
{
for (int i = 0; i < list.Count; i++)
if (predicate(list[i]))
list.RemoveAt(i--);
}
}
}