Ответ 1:
В вашем примере - вы, возможно, итерируете по перечисляемому FULL дважды.
// i use
foreach (var human in ark.OfType<Human>())
{
}
foreach (var animal in ark.OfType<Animal>())
{
}
Ответ 2:
Будет выдано исключение InvalidCastException, если в ковчеге есть не человек.
Я бы лично предпочел ark.OfTypes<T>()
, если я знаю, что хочу иметь дело только с Human
и Animals
, но проигнорирую Elves
. Таким образом, код становится намного чище, и вы имеете дело со строго типизированным объектом в цикле foreach.
Но опять же, если я не хочу игнорировать Elves
, я бы предпочел повторить полный ArrayList и использовать приведение.