Olası Çoğalt:
Foreach can throw an InvalidCastException?Derleyici neden bu fişe izin veriyor?
aşağıdaki kod bloğunu
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());
}
}
}
Bildirim foreach döngüsü içinde DerivedLeft için Üssü'nden döküm düşünün. Bu, herhangi bir hata ya da uyarı olmaksızın iyi bir şekilde (Visual Studio 2010) derler. Açıkçası, ikinci döngü yinelemesinde bir InvalidCastException alacağız. Derleyicinin bu tür bir koda karşı tepkisi ile ilgili bir soru sorulursa, hiç şüphesiz bu derleyicinin fark edilmesine ve en az bir uyarı üretmesine izin vermeyeceğim. Ama görünüşe göre değil. Öyleyse, derleyici neden bu geçişten geçiyor?
Ben derleyici örn .... başlatma kontrol etmez düşünüyorum. Eğer MyOtherClass'ı orada bir derleme zamanı istisnası varsa –
@RoyiNamir: Evet, derleyici, başlatmanın doğru olup olmadığını kontrol eder, ancak foreach döngüsüne ulaştığında sadece eşleşen elemanların olup olmadığını kontrol etmez. – Fischermaen
doğru ............ –