请考虑以下代码块
public class Base
{
}
public class DerivedLeft : Base
{
}
public class DerivedRight : Base
{
}
class Program
{
static void Main(string[] args)
{
List<Base> list = new List<Base> { new DerivedLeft(), new DerivedRight() };
foreach (DerivedLeft dl in list)
{
Console.WriteLine(dl.ToString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意foreach语句中从Base到DerivedLeft的强制转换.这编译得很好(Visual Studio 2010),没有任何错误甚至警告.显然,在第二次循环迭代中,我们将得到一个InvalidCastException.如果我被问到一个关于编译器对这些代码的反应的问题,我毫无疑问会说,编译器不会让这一点被忽视并产生至少一个警告.但显然它没有.那么,为什么编译器会让这个漏掉呢?
c# ×1