2015-09-21 20 views
-3

所以,如果我有這樣的事情:如果第二行拋出異常C#恰好代碼try語句什麼是沒有一個後拋出一個異常被拋出

try 
{ 
    variable = Image.FromFile("Image1"); 
    variable2 = Image.FromFile("Image2"); 
    variable3 = Image.FromFile("Image3"); 
} 
catch (Exception e) { } 

會發生什麼?變量1是否正確分配而不是2或3?或者在處理異常之後嘗試執行3?

+0

在哪一行引發異常,它不會在'try'繼續。但所做的更改仍將保留 –

+1

測試這裏實際發生的事情是如此微不足道,爲什麼要問一個問題? – DavidG

回答

5

由於所有變量都是局部的(範圍)到try塊,所以它並不重要,因爲您無法訪問該塊之外的任何變量。

當遇到Exception控制轉移到最內層catch時,無法忽略它並繼續下一個語句。

更新

自己的更改,如果第二FromFile拋出,然後variable將有Image。變量2/3將不會發生變化(所以最有可能爲空)。

+0

我假設他們不是但沒關係,我會編輯 – jklsfdgs

+2

@Asourcious根據你的編輯,是的,即使'variable2'引發異常,'variable'也會有圖像。不過,這真的是你可以在2秒內測試過的東西。 – Rob

2

如果拋出第二條語句,它就會失效。第一個聲明會成功。第三將永遠不會被評估。

就像另一個海報說的那樣,這種情況並不重要,因爲變量是局部的,ReadFromFile沒有副作用。

1

名爲variable的第一個變量將成功賦值給它。

在第二行拋出異常,之後的任何內容都被丟棄,但之前的任何內容都會執行。所以爲了進一步簡化:

  • 執行第一條語句。
  • 第2次拋出異常值不存儲在變量中。
  • 3,4,5 ...不會執行。

如果你有一個try/catch/finally那麼finally將始終執行。

如果您想深入瞭解異常處理的工作原理,請參閱本文。

http://www.codeproject.com/Articles/125470/Exception-Handling-for-C-Beginners

相關問題