2

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

所以我刚刚注意到,在 msdn 示例和一些 stackoverflow 问题中,在流写入器等之前使用 using 语句的地方有答案,但实际上有什么好处?因为我从来没有被教导/告诉/阅读过任何使用它的理由。

            using (StreamReader sr = new StreamReader(path)) 
            {
                while (sr.Peek() >= 0) 
                    Console.WriteLine(sr.ReadLine());
            }

代替:

            StreamReader sr = new StreamReader(path);
            while (sr.Peek() >= 0) 
                Console.WriteLine(sr.ReadLine());
4

4 回答 4

6

using 块调用Dispose自动使用的对象的方法,好处是保证被调用。因此,无论语句块中是否引发异常,都将处理该对象。它被编译成:

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

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

于 2013-01-31T23:36:33.477 回答
2

using 提供了一种方便的语法,可确保正确使用 IDisposable 对象。它被编译成:

StreamReader sr = new StreamReader(path);
try 
{
    while (sr.Peek() >= 0) 
        Console.WriteLine(sr.ReadLine());
} finally
{
    sr.Dispose();
}

如 MSDN 中所述

于 2013-01-31T23:42:10.940 回答
1

using 语句适用于实现 IDisposable 接口的东西。

.net 将保证 StreamReader 将被处置。

您不必担心关闭或进一步管理它:只需在“使用”范围内使用您需要的东西。

于 2013-01-31T23:38:29.877 回答
1

它会自动为您调用该StreamReader.Dispose()方法。如果您选择不使用该using关键字,则在运行代码块后您最终会得到一个开放的流。如果您想保留文件(等)以供继续使用,这是有益的,但如果您不打算在完成后手动处理它,则可能是不好的做法。

于 2013-01-31T23:40:38.370 回答