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

  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • Myron and Nejusha dance

    Myron and Ne

    2 AĞUSTOS 2012
  • superemposed

    superemposed

    25 Aralık 2007