我知道如何在數據庫調用的情況下使用try/catch塊,並知道如何在使用try/finally構造的情況下使用「using」指令。C#:「using」指令和try/catch塊
但是,我可以混合它們嗎?我的意思是當我使用「使用」指令時,我是否也可以使用try/catch結構,因爲我仍然需要處理可能的錯誤?
我知道如何在數據庫調用的情況下使用try/catch塊,並知道如何在使用try/finally構造的情況下使用「using」指令。C#:「using」指令和try/catch塊
但是,我可以混合它們嗎?我的意思是當我使用「使用」指令時,我是否也可以使用try/catch結構,因爲我仍然需要處理可能的錯誤?
當然,你可以做到這一點:
using
是由編譯器翻譯成try..finally
,所以它不是從一個嵌套一個try..catch
裏面try..finally
非常不同。
你可以一起使用兩者。
A using
塊基本上只是try/finally塊的一些語法糖,如果你願意,你可以嵌套try/finally塊。
using (var foo = ...)
{
// ...
}
大致是相同的:
var foo = ...;
try
{
// ...
}
finally
{
foo.Dispose();
}
這一個完全有效:
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
區塊)。
一個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
異常處理。
你爲什麼不試試呢? – sloth
當然你可以「混合」他們。有沒有你不明白的特殊情況? –
在我的情況下,我有與WCF服務中的數據庫交互的代碼。在這種情況下,用法是否相同? – tesicg