Оператор foreach
может приводить переменную перечисления:
IEnumerable objects = ...;
foreach (AnyTypeHere i in objects)
...
IEnumerable<Button> buttons = ...;
foreach (MySpecialButton button in buttons)
...
Это будет работать до тех пор, пока все кнопок в перечислении имеют тип MySpecialButton
, а не Button
. Если вы этого не знаете, то можете перечислять только кнопки типа MySpecialButton
, например:
IEnumerable<Button> buttons = ...;
foreach (MySpecialButton button in buttons.OfType<MySpecialButton>())
...
OfType
отличается от Cast
тем, что фильтрует перечисление, а не выдает исключение, когда объект имеет тип, который не может быть приведен к целевому типу.