Я бы сделал это следующим образом:
For Each pb In Me.Controls.OfType(Of PictureBox)().ToArray()
pb.Dispose()
Next
Метод OfType
выполняет фильтрацию по типу и поэтому немного убирает код. Вызов ToArray
означает, что вы не перечисляете коллекцию, которую вы изменяете в l oop. Вызов Dispose
лучше вызова Remove
, потому что Dispose
неявно удалит, но Remove
не удастся неявно удалить.
Если вы закончили с Image
в PictureBox
, тогда вы следует утилизировать его, что вы можете аккуратно сделать следующим образом:
For Each pb In Me.Controls.OfType(Of PictureBox)().ToArray()
pb.Image?.Dispose()
pb.Dispose()
Next
Использует нулевое распространение, поэтому не будет выбрасывать NullReferenceException
, если свойство Image
равно Nothing
. Если в любом случае у этого нет шансов, просто используйте обычный оператор точки. Это нулевое распространение эквивалентно этому:
For Each pb In Me.Controls.OfType(Of PictureBox)().ToArray()
If pb.Image IsNot Nothing Then
pb.Image.Dispose()
End If
pb.Dispose()
Next