在使用C#将文件加载到字符串变量时,是否需要显式关闭StreamReader?

在使用C#将文件加载到字符串变量时,是否需要显式关闭StreamReader?,c#,streamreader,C#,Streamreader,例如: variable = new StreamReader( file ).ReadToEnd(); 可以接受吗 你应该随时处置你的资源 // the using statement automatically disposes the streamreader because // it implements the IDisposable interface using( var reader = new StreamReader(file) ) { variable = re

例如:

variable = new StreamReader( file ).ReadToEnd();

可以接受吗

你应该随时处置你的资源

// the using statement automatically disposes the streamreader because
// it implements the IDisposable interface
using( var reader = new StreamReader(file) )
{
    variable = reader.ReadToEnd();
}
或者至少手动调用它:

reader = new StreamReader(file);
variable = reader.ReadToEnd();
reader.Close();

您需要处理实现
IDisposable
的对象。使用
using
语句确保在不显式调用Dispose方法的情况下释放它

using (var reader = new StreamReader(file))
{
  variable = reader.ReadToEnd();
}
或者,使用


关闭
StreamReader
是一种很好的做法。使用以下模板:

string contents;

using (StreamReader sr = new StreamReader(file)) 
{
   contents = sr.ReadToEnd();
}

您最好使用使用关键字;然后,您不需要显式关闭任何对象。

是的,无论何时创建一次性对象,您都必须使用using语句来处理它

using (var reader = new StreamReader(file)) {
  variable = reader.ReadToEnd(file);
}
在这种情况下,您可以使用
File.ReadAllText
方法简化表达式

variable = File.ReadAllText(file);

不,这不会关闭StreamReader。你需要关闭它。使用可以为您做到这一点(并将其进行处理,以便更快):

或者,在.NET2中,您可以使用新文件。静态成员,则无需关闭任何内容:

variable = File.ReadAllText("file.txt");

+1但我会说“如果您使用”使用“声明以确保它被处置+1因为这比Dismissile的回答更清楚。他的回答并没有解释using语句将为您处置资源,而不知道这一点的人将被抛在脑后。对于不知道using语句自动为您处理这一问题的人,这将令人困惑。没有否决票,也没有赞成票,因为这不是初学者可以理解的。在第二个示例中,添加了一条注释以帮助您根本不调用Dispose()。并且没有try-catch机制来确保Close()被调用。当您同时添加这两者时,try-catch和Dispose()调用只会导致使用,就像在第一个示例中一样。这很好地解释了这一点,但是它没有提到,就像badbod99和其他几个例子一样,“或者在.Net 4中,您可以使用新文件。静态成员,然后您不需要关闭任何内容”虽然badbod99提供了一些更多的细节,但这还是很有帮助的。我假设这些细节都是正确的,因为我只是刚刚接触到javascript之外的代码。
ReadAllText
是在.NET2.0中添加的(),谢谢Jared(编辑的答案).TBH我最近才遇到。一旦知道一种方法,您通常会坚持使用有效的方法。使用StreamReader.ReadToEnd和File.ReadAllTest时,性能是否有差异?
using (StreamReader r = new StreamReader("file.txt"))
{
  allFileText = r.ReadToEnd();
}
variable = File.ReadAllText("file.txt");