2012-10-26 102 views
0

我知道如何在數據庫調用的情況下使用try/catch塊,並知道如何在使用try/finally構造的情況下使用「using」指令。C#:「using」指令和try/catch塊

但是,我可以混合它們嗎?我的意思是當我使用「使用」指令時,我是否也可以使用try/catch結構,因爲我仍然需要處理可能的錯誤?

+5

你爲什麼不試試呢? – sloth

+0

當然你可以「混合」他們。有沒有你不明白的特殊情況? –

+0

在我的情況下,我有與WCF服務中的數據庫交互的代碼。在這種情況下,用法是否相同? – tesicg

回答

1

當然,你可以做到這一點:

using是由編譯器翻譯成try..finally,所以它不是從一個嵌套一個try..catch裏面try..finally非常不同。

2

你可以一起使用兩者。

A using塊基本上只是try/finally塊的一些語法糖,如果你願意,你可以嵌套try/finally塊。

using (var foo = ...) 
{ 
    // ... 
} 

大致是相同的:

var foo = ...; 
try 
{ 
    // ... 
} 
finally 
{ 
    foo.Dispose(); 
} 
0

這一個完全有效:

using (var stream = new MemoryStream()) 
{ 
    try 
    { 
     // Do something with the memory stream 
    } 
    catch(Exception ex) 
    { 
     // Do something to handle the exception 
    } 
} 

,編譯器將轉化爲

var stream = new MemoryStream(); 
try 
{ 
    try 
    { 
     // Do something with the memory stream 
    } 
    catch(Exception ex) 
    { 
     // Do something to handle the exception 
    } 
} 
finally 
{ 
    if (stream != null) 
    { 
     stream.Dispose(); 
    } 
} 

當然,這嵌套這工作其他窪y也是如此(例如,在try...catch區塊中嵌套using區塊)。

0

一個using如:

using (var connection = new SqlConnection()) 
{ 
    connection.Open 
    // do some stuff with the connection 
} 

僅僅是編碼像下面有一個語法捷徑。

SqlConnection connection = null; 
try 
{ 
    connection = new SqlConnection(); 
    connection.Open 
    // do some stuff with the connection 
} 
finally 
{ 
    if (connection != null) 
    { 
     connection.Dispose() 
    } 
} 

這意味着,是的,你可以混合使用其他try..catch,或其他。這就好像將try..catch嵌套在try..finally中一樣。 它只是作爲一個快捷方式,以確保您正在使用的物品在超出範圍時被處置。它不會對你在範圍內做什麼有真正的限制,包括提供你自己的try..catch異常處理。