在streamwriter,streamreader之前使用声明的好处/使用

Ran*_*Guy 2 c# using-statement

可能重复:
什么是C#使用块,为什么要使用它?

所以我刚刚注意到在msdn示例和一些stackoverflow问题上有回答,其中using语句在streamwriter等之前使用,但实际上有什么好处呢?因为我从未被教过/告知/读过任何使用它的理由.

            using (StreamReader sr = new StreamReader(path)) 
            {
                while (sr.Peek() >= 0) 
                    Console.WriteLine(sr.ReadLine());
            }
Run Code Online (Sandbox Code Playgroud)

代替:

            StreamReader sr = new StreamReader(path);
            while (sr.Peek() >= 0) 
                Console.WriteLine(sr.ReadLine());
Run Code Online (Sandbox Code Playgroud)

Sin*_*ian 6

using块调用Dispose自动使用的对象的方法,好的一点是保证被调用.因此,无论事件是否在语句块中抛出异常,都会处置该对象.它被编译成:

{
    StreamReader sr = new StreamReader(path);
    try
    {
        while (sr.Peek() >= 0) 
            Console.WriteLine(sr.ReadLine());
    }
    finally
    {
        if(sr != null)
            sr.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

额外的花括号用于限制范围sr,因此无法从使用块的外部访问它.