簡單介紹一下C# exception的用法及基本觀念
為什麼要用try catch來補抓exception呢??
1. 因為如果你沒補抓及處理,那錯誤訊息就直接顯示給使用者看了,使用者一定看不懂,只會增加困擾.
2. 如果錯誤訊息直接顯示,就是直接提供給駭客一些攻擊系統的資訊.
3. 如果補抓就有補救的機會,沒抓跳exception就是程式掛點.
那怎麼控制exception呢??最常用的就是try catch finally,程式如下
public class program
{
static void Main()
{
try
{
StreamReader streamReader = new StreamReader(@"D:\data\a.txt");
Console.WriteLine(streamReader.ReadToEnd());
Console.ReadKey();
}
catch( Exception ex )
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
}
基本使用方法就是把可能會有exception的程式碼放到try區塊裡,如果有exception的話就會被補捉.
你使用catch(Exception ex),基本上所有的exception就都能補捉到了,因為所有的exception都是從Exception這個類衍生出來的.
但是有時候Exception這個類大粗略,我想要捕捉到更詳細的錯誤資訊,那你就要加上其他的exception,如下
public class program
{
static void Main()
{
try
{
StreamReader streamReader = new StreamReader(@"D:\data\a.txt");
Console.WriteLine(streamReader.ReadToEnd());
}
catch( FileNotFoundException ex)
{
Console.WriteLine("File {0} Not Found!! Please Check", ex.FileName);
}
catch( DirectoryNotFoundException ex )
{
Console.WriteLine("Path {0} Not Found!! Please Check", ex.Source);
}
catch( Exception ex )
{
Console.WriteLine(ex.Message);
}
}
}
像上例就加了二個,分別是檢查路徑及檔名如果有誤就會跳exception,並顯示程式設計者希望給使用者看到的訊息,每個exception所包含的細部訊息都不同,視需求使用.
另有一重要要強調,越粗略的exception要放越後面,像catch(Exception ex)就必須放在最後面,不然編譯時就會有錯誤.
最後來介紹finally,它是整段程式必執行的部分,通常是用來放清資源的,程式如下
public class program
{
static void Main()
{
StreamReader streamReader = null;
try
{
streamReader = new StreamReader(@"D:\data\a.txt");
Console.WriteLine(streamReader.ReadToEnd());
}
catch( FileNotFoundException ex)
{
Console.WriteLine("File {0} Not Found!! Please Check", ex.FileName);
}
catch( DirectoryNotFoundException ex )
{
Console.WriteLine("Path {0} Not Found!! Please Check", ex.Source);
}
catch( Exception ex )
{
Console.WriteLine(ex.Message);
}
finally
{
if (streamReader != null)
{
streamReader.Close();
}
}
}
}
我們最後在finally裡加了將streamReader關掉的程式碼,不管是否有跳出exception都會將streamReader關掉釋放資源.
留言列表