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);});