SORU
1 AĞUSTOS 2013, PERŞEMBE


Neden't a '' deyim devam 'nihayet' blok içinde olabilir?

Bir sorun yok, sadece merak ediyorum. Aşağıdaki senaryoyu düşünün:

foreach (var foo in list)
{
    try
    {
         //Some code
    }
    catch (Exception)
    {
        //Some more code
    }
    finally
    {
        continue;
    }
}

Bu compiler error CS0157 yükseltir olarak derlemek olmaz:

Kontrol edemiyor nihayet bir madde bedeni terk

Neden?

CEVAP
1 AĞUSTOS 2013, PERŞEMBE


finally bir özel durum ya da engeller. Eğer bir özel durum, heck continue ne yapardı? Olamaz yakalanmamış bir istisna başka bir işlev için Denetim transferi olacak çünkü döngü yürütme devam ediyor.

Eğer bir istisna, finally try/içinde diğer kontrol transfer açıklamaları blok çalıştırmak yakalamaya çalışır, aynı sorun getiriyor return, örneğin, gibi atılacak olsa bile.

finally semantiği ile kısa, anlam dışına finally bir blok içindeki kontrol transfer izin vermek için yapmaz.

Bazı alternatif semantiği ile bunu destekleyen basit olduğundan yararlı daha kafa karıştırıcı olacak amaçlanan davranış şeklini daha net hale getiren çözümler. Bir hata alıyorum, ve düzgün bir şekilde sorun hakkında düşünmek zorunda kalıyor. Genel "başarı çukura atmak" giden bir fikir C#.

C#, you, and the out if success

Eğer özel durumlar (kötü bir fikir değil daha sık) göz ardı döngü yürütme devam etmek istiyorsanız, tüm blok yakalamak kullanın:

foreach ( var in list )
{
    try{
        //some code
    }catch{
        continue;
    }
}

Eğer hiç yakalanmamış özel durum oluşturuldu, sadece 10 ** isterseniz, sadece dışarıdan continue dene-blok koydu.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Julian Smith

    Julian Smith

    31 EKİM 2006
  • kndx

    kndx

    11 Mart 2006
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005