3 回答

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊
從MSDN,使用Statement(C#參考)
using語句確保即使在調(diào)用對象的方法時發(fā)生異常,也將調(diào)用Dispose。通過將對象放在try塊中,然后在finally塊中調(diào)用Dispose,可以達(dá)到相同的結(jié)果。實際上,這就是編譯器翻譯using語句的方式。前面的代碼示例在編譯時擴展為以下代碼(請注意,額外的花括號可創(chuàng)建對象的有限作用域):
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
因此,基本上,這是相同的代碼,但是具有很好的自動空檢查和變量的額外作用域。該文檔還指出,它“確保IDisposable對象的正確使用”,因此您將來也可能會為任何晦澀的情況獲得更好的框架支持。
因此,選擇選項2。
將變量包含在不再需要的范圍內(nèi)立即結(jié)束的作用域也是一個加號。

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊
考慮這兩種解決方案都不好,因為它們掩蓋了異常的可能性。
try沒有a的A catch顯然是個壞主意;請參閱MSDN,以了解該using聲明為何同樣危險。
另請注意,Microsoft現(xiàn)在建議使用ReaderWriterLockSlim而不是ReaderWriterLock。
最后,請注意,Microsoft示例使用兩個try-catch塊來避免這些問題,例如
try
{
try
{
//Reader-writer lock stuff
}
finally
{
//Release lock
}
}
catch(Exception ex)
{
//Do something with exception
}
一個簡單,一致,干凈的解決方案是一個不錯的目標(biāo),但是假設(shè)您不能僅使用lock(this){return mydateetc;},您可能會重新考慮該方法。有了更多信息,我相信堆棧溢出可以提供幫助;-)
- 3 回答
- 0 關(guān)注
- 554 瀏覽
添加回答
舉報