Capita di dovere scorrere il contenuto di una lista generica e in base ad alcune condizioni rimuovere alcuni items.

Dim list As New List(Of Byte)
list.AddRange(New Byte() {10, 20, 30, 40})

For Each b As Byte In list
 If (b < 25) Then list.Remove(b)
Next

Il problema è che rimuovendo l'item la collezione viene modificata e quindi non è più possibile enumerarla.
Usando List.RemoveAll associato al relativo Predicate(Of T) il problema non si pone.

list.RemoveAll(AddressOf RemoveAllInternal)

Private Function RemoveAllInternal(ByVal b As Byte) As Boolean
  Return b < 25
End Function

Ovviamente con C# e gli anonymous delegates il codice è ancora più elegante.

List<Byte> list=new List<byte>();
list.AddRange(new byte[]{10,20,30,40});
list.RemoveAll(delegate(byte inByte){return (inByte < 25);});