C# try block 中的 return 是直接跳回上一層程式嗎?

更新於 發佈於 閱讀時間約 4 分鐘

程式寫久了對執行流程會總有些自以為是的邏輯,而這些自己為是的可能讓你產生難以找尋的Bug.比如說在任何地方return就是直接回到原呼叫端的流程,但是這個return在try block中可能不是想像中的那樣。

以下範例讓我們看看return之後程式跑到那去?

// returnInTryBlock : 是否在try block 中 return
void TestReturnInTryBlock(bool returnInTryBlock)
{
Console.WriteLine ("開始TestReturnInTryBlock");

try
{
Console.WriteLine ("開始Try Block");

if (returnInTryBlock)
{
Console.WriteLine ("returnInTryBlock is true");

Console.WriteLine ("即將 return");
return;
}
else
{
Console.WriteLine ("returnInTryBlock is flase");
}

Console.WriteLine ("結束Try Block");
}
finally
{
Console.WriteLine ("開始Finally block");

// some code for clean up

Console.WriteLine ("結束Finally block");
}

Console.WriteLine ("結束TestReturnInTryBlock");
}

測試一下try block中沒有執行到return的流程,如預期的在沒有exception的情況下,完整的執行完try block後接著執行finally block,執行完finally block後再執行try statements之後的流程,也就是Console.WriteLine ("結束TestReturnInTryBlock"); 最後就離開了TestReturnInTryBlock程序回到了上一層的叫用程序。

Console.WriteLine ("程式開始");

TestReturnInTryBlock (false);

Console.WriteLine ("程式結束");


//=== 執行結果
程式開始
開始TestReturnInTryBlock
開始Try Block
returnInTryBlock is flase
結束Try Block
開始Finally block
結束Finally block
結束TestReturnInTryBlock
程式結束

再來測試try block中有執行到return的流程,原本預期的在沒有exception的情況下,完整的執行到return時會離開了TestReturnInTryBlock程序回到了上一層的叫用程序,但執行結果並非如此,而是執行到return後依然會跳躍到finally block , 完整執行完finally block 後才會直正的return回上一層的程序。

Console.WriteLine ("程式開始");

TestReturnInTryBlock (true);

Console.WriteLine ("程式結束");

//=== 執行結果
程式開始
開始TestReturnInTryBlock
開始Try Block
returnInTryBlock is true
即將 return
開始Finally block
結束Finally block
程式結束


所以我以前在使用try catch finally這一組的 statements常常畫蛇添足,為了要釋放之前叫用如資料庫連線的一些資源,會額外在try block 中有return情況前多叫用了和 finally block中相同的程式一次,現在知道了,以後就只要安心的在try block中return就好了,程式流程一定會走到finally block完成後return回上一層的程序。

留言
avatar-img
留言分享你的想法!
avatar-img
Pluto Liu的沙龍
3會員
3內容數
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
回頭看了一眼,腳步仍然往前進 這是一篇廣告文,也是一篇回顧,反省是否進步?還是走錯路? 每個人都有選擇,每天都在做出選擇,但沒有標準答案
Thumbnail
回頭看了一眼,腳步仍然往前進 這是一篇廣告文,也是一篇回顧,反省是否進步?還是走錯路? 每個人都有選擇,每天都在做出選擇,但沒有標準答案
Thumbnail
學習軟體開發的路上常常苦於網路資訊爆炸嗎? 教學何其多,但卻遇到無法明確選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您業界開發重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 人生的道路中總會來點意外與
Thumbnail
學習軟體開發的路上常常苦於網路資訊爆炸嗎? 教學何其多,但卻遇到無法明確選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您業界開發重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 人生的道路中總會來點意外與
Thumbnail
在第八課中,我們將探索 Python 中的錯誤處理。 當 Python 程式在運行過程中遇到錯誤時,會引發所謂的異常 (Exceptions)。 我們可以使用 try/except 語句來捕獲和處理這些異常,防止我們的程式意外終止。
Thumbnail
在第八課中,我們將探索 Python 中的錯誤處理。 當 Python 程式在運行過程中遇到錯誤時,會引發所謂的異常 (Exceptions)。 我們可以使用 try/except 語句來捕獲和處理這些異常,防止我們的程式意外終止。
Thumbnail
Hi,大家好。我是茶桁。 在我们日常使用Python或者其他编程语言的时候,不可避免的都会出现报错和异常。那么,我们今天就来谈谈异常。 什么是异常? 异常异常,根据名字简单理解,那就是非正常,也就是没有达到预期目标。
Thumbnail
Hi,大家好。我是茶桁。 在我们日常使用Python或者其他编程语言的时候,不可避免的都会出现报错和异常。那么,我们今天就来谈谈异常。 什么是异常? 异常异常,根据名字简单理解,那就是非正常,也就是没有达到预期目标。
Thumbnail
★指路何去─這是我自己選擇的路。 踏上了,說什麼也不會輕言放棄。
Thumbnail
★指路何去─這是我自己選擇的路。 踏上了,說什麼也不會輕言放棄。
Thumbnail
跳越頻道已建立,連線成功,呼 ⋯似乎是完成了,來試試看吧。🕙
Thumbnail
跳越頻道已建立,連線成功,呼 ⋯似乎是完成了,來試試看吧。🕙
Thumbnail
近幾年看到蠻多光怪陸離的開發鬼故事,也見識過各種奇醜無比的失事原因
Thumbnail
近幾年看到蠻多光怪陸離的開發鬼故事,也見識過各種奇醜無比的失事原因
Thumbnail
其實每次的糾結都有答案,只是我好像很喜歡這種糾結的過程和試探,老靈魂在拉扯,看破的卻不說破的,寧可磕到了才願意放手的那種要叫做魯莽嗎的勇氣。不願意後悔,可能是最後的原動力,倒乾淨最後的殘沙,鞋子穿了走路才會舒服。大不了換一雙拖鞋。
Thumbnail
其實每次的糾結都有答案,只是我好像很喜歡這種糾結的過程和試探,老靈魂在拉扯,看破的卻不說破的,寧可磕到了才願意放手的那種要叫做魯莽嗎的勇氣。不願意後悔,可能是最後的原動力,倒乾淨最後的殘沙,鞋子穿了走路才會舒服。大不了換一雙拖鞋。
Thumbnail
多希望用力喊可以把你喊回來 多希望用力哭可以把你哭回來 你怎麼都不回來 躲貓貓遊戲結束了 你快出來 人生若有返回鍵該多好 多希望你入夢來 你還沒學會怎麼託夢嗎 你好嗎 我好想你
Thumbnail
多希望用力喊可以把你喊回來 多希望用力哭可以把你哭回來 你怎麼都不回來 躲貓貓遊戲結束了 你快出來 人生若有返回鍵該多好 多希望你入夢來 你還沒學會怎麼託夢嗎 你好嗎 我好想你
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News