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

  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008
  • max2sims2

    max2sims2

    19 Kasım 2008
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013