2012年1月2日 星期一

using 與 try/finally 有何差異?

public string ReaderLine(string FileName)
{
    if (!File.Exists(FileName))
        return null;
    Stream stream = null;
    StreamReader reader = null;
    string line = "";
    StringBuilder sb = new StringBuilder();
    try
    {
        stream = File.Open(FileName, FileMode.Open);
        reader = new StreamReader(stream);
        while ((line = reader.ReadLine()) != null)
        {
            sb.AppendLine(line);
        }

        return sb.ToString();
    }
    finally
    {
        if (stream != null)
            stream.Close();
        if (reader != null)
            reader.Close();
    }
}





public string ReaderLine(string FileName)
{
    if (!File.Exists(FileName))
        return null;

    string line = "";
    StringBuilder sb = new StringBuilder();
    using (Stream stream = File.Open(FileName, FileMode.Open))
    {
        using (StreamReader reader = new StreamReader(stream))
        {
            while ((line = reader.ReadLine()) != null)
            {
                sb.AppendLine(line);
            }
            return sb.ToString();
        }
    }
}


不管是using還是try/finally都不會吃掉例外訊息。


後記:

由上面的演示我們可以知道

1.using跟try/finally,都不會吃掉例外訊息,因為沒有寫catch區段。

2.using是try/finally的簡易寫法。

兩者的寫法結果都一樣,就看自己喜歡什麼樣子的寫法,using的寫法看起來比較短,若只有一層我會使用,但如果有多層using(兩層以上),我就會覺得閱讀上有很大的不便,我就不會採用這樣的寫法。


原始文章出自於此

沒有留言:

張貼留言