using(............)
{
try
{
DoSometing() ;
}
catch(Exception)
{
throw ;
}
}
從來沒有思考過,在 using 外部使用 try catch 會發生甚麼事情try
{
using(............)
{
DoSometing();
}
}
catch(Exception)
{
throw ;
}
老師上課時提到,知道 using 是 try finally 的話,就會知道問題點是甚麼,當下 dmeo 跑出結果,也完全沒看出問題點,Orz以下是根據老師的 sample code 來了解到底問題點是甚麼
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// using 內部使用 try catch
using (demo d = new demo())
{
try
{
d.Call();
}
catch (Exception)
{
throw;
}
}
// using 外部使用 try catch
try
{
using (demo d = new demo())
{
d.Call();
}
}
catch (Exception)
{
throw;
}
}
}
public class demo : IDisposable
{
public void Call()
{
Console.WriteLine("Call Function Fired");
throw new InvalidProgramException("Call Exception");
}
public void Dispose()
{
throw new InvalidOperationException("Test Excpetion");
}
}
}
- using 內部使用 try catch
- using 外部使用 try catch
老師 slide 結論:
- using 內部使用 try catch 會捕抓內部的 Exception
- using 外部使用 try catch 會捕抓 Dispose 的 Exception
- 參考資料
- K.NET C# 深耕課程 - 例外處理實務
- [.NET] 例外處理原則 - 老師 Blog 上介紹 Exception 文章
- C# Using Blocks can Swallow Exceptions
沒有留言:
張貼留言