2012-03-07 22 views
9

ben ne olacağını emindim rağmen aşağıdaki test kodu yazmış: YeterinceNihayet engellendikten sonra döndürülen değere ne olur?

static void Main(string[] args) 
{ 
    Console.WriteLine(Test().ToString()); 
    Console.ReadKey(false); 
} 

static bool Test() 
{ 
    try 
    { 
     try 
     { 
      return true; 
     } 
     finally 
     { 
      throw new Exception(); 
     } 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 

Tabii, programın konsola "Yanlış" yazdı. Sorum şu, başlangıçta geri gönderilen gerçek ne oluyor? Mümkünse, bu değeri elde etmek için herhangi bir yol var mı, yoksa mümkünse orjinal blokta mı?

Sadece açıklığa kavuşturmak için, bu sadece eğitim amaçlıdır. Asla gerçek bir programda böyle bir kıvrık istisna sistemi yapmam.

+0

Neredeyse bir kopya: [Nihayetinde bloke edilen bir son dönüş değeri için yasal ve mümkün mü?] (Http://stackoverflow.com/q/304847/256431) –

cevap

5

Hayır, bu değeri elde etmek mümkün değil, sonuçta yalnızca bool döndürülüyor. Yine de bir değişken ayarlayabilirsiniz.

static bool Test() 
{ 
    bool returnValue; 

    try 
    { 
     try 
     { 
      return returnValue = true; 
     } 
     finally 
     { 
      throw new Exception(); 
     } 
    } 
    catch (Exception) 
    { 
     Console.WriteLine("In the catch block, got {0}", returnValue); 
     return false; 
    } 
} 

Yine de dağınık. Ve eğitim amaçlı, cevap hayır.

+0

Tamam, cevabınız için teşekkürler. Oh iyi. – aboveyou00

+3

Bu aslında VB.NET'te ilginçtir, burada yerel değişken dönüş sonucu 'Test' sizin için önceden tanımlanmıştır. Sadece test ettim ve 'Try' bloğunun iç kısmında' Return True' kullanıldığında bile 'Catch' eşdeğerine 'True' denir. Ve, elbette, 'False' fonksiyon tarafından geri döndürülür. –

+2

@MarkHurd: Bu ilginç. Bunu bir yerde kullanmam lazım :) Hmm ... – Ryan

İlgili konular