我写了这段代码
var doc = new StreamReader(stream).ReadToEnd();
但后来我记得应该使用C#的using block来确保尽快调用StreamReader的清理方法Dispose。这给了我这段代码
string doc;
using (var reader = new StreamReader(stream))
{
doc = reader.ReadToEnd();
}
这是更长,更难阅读。是否有一个更简单的单行语法仍然正确地使用IDisposable东西?
答案 0 :(得分:2)
在块中只有一行,你可以简单地写
using (var reader = new StreamReader(stream))
doc = reader.ReadToEnd();
然而,没有办法进一步简化这一点。对于这样的事情,using
只是一些语法糖:
var reader = new StreamReader(stream);
try
{
doc = reader.ReadToEnd();
}
finally
{
reader.Dispose();
}
这甚至不会阻止您在处置后访问该对象。所以using
实际上是完成工作的简短方法。
关于合并using
- 语句的一个注释:如果您正在使用FileStream
和StreamReader
/ StreamWriter
,则可以简单地合并多个using
- 语句一个人:
using (var stream = new FileStream(@"C:\Test.txt", FileMode.Open, FileAccess.Read))
using (var reader = new StreamReader(stream))
{
doc = reader.ReadToEnd();
}
答案 1 :(得分:0)
您可以像这样手动调用dispose方法:
var reader= new StreamReader(stream);
try
{
var doc = reader.ReadToEnd();
}
finally
{
reader.Dispose();
}
这实际上等同于使用语法。但是使用它仍然是编写它的最短路径。
答案 2 :(得分:0)
没有。 3个操作通常需要3行...特别是如果每个操作返回一些内容。
您有几个选择:
Dispose()
。using
..就像它的意图:)如果你担心额外的线路......你会担心错误的事情。