Просто пытаюсь понять C#. Просто рассмотрим следующий упрощенный пример.Почему этот неявный листинг не приводит к ошибке времени компиляции?
void Main()
{
IList<IAnimal> animals = new List<IAnimal>
{
new Chicken(),
new Cow(),
};
// Shouldn't this line result in a compile-time error?
foreach (Chicken element in animals)
{
}
}
public interface IAnimal
{
}
public class Cow : IAnimal
{
}
public class Chicken : IAnimal
{
}
Хотя первая итерация завершается успешно, вторая - нет. Честно говоря, я ожидал, что это не сработает во время компиляции. Кто-нибудь понимает, почему он только терпит неудачу во время выполнения?
[Ответил Эрик Липперт] (http://ericlippert.com/2013/07/22/why-does-a-foreach-loop-silently-insert-an-explicit-conversion/) –
Также см .: [ Почему цикл foreach молча вставляет «явное» преобразование?] (Http://ericlippert.com/2013/07/22/why-does-a-foreach-loop-silently-insert-an-explicit-conversion/) by Eric Lippert – Habib
Не мог ли кто-нибудь связать сообщение Эрика Липперта об этом? – CodeCaster