1

我写了这段代码

var doc = new StreamReader(stream).ReadToEnd();

但后来我记得应该使用 C# 的 using 块来确保 StreamReader 的清理方法 Dispose 被尽快调用。这给了我这个代码

string doc;
using (var reader = new StreamReader(stream))
{
    doc = reader.ReadToEnd();
}

这更长更难阅读。是否有更简单的一行语法仍然可以正确执行 IDisposable 的内容?

4

3 回答 3

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-statements 的注意事项:如果您正在使用FileStreamand StreamReader/ StreamWriter,您可以简单地将多个using-statements 组合为一个:

using (var stream = new FileStream(@"C:\Test.txt", FileMode.Open, FileAccess.Read))
using (var reader = new StreamReader(stream))
{
    doc = reader.ReadToEnd();
}
于 2013-06-25T10:32:24.920 回答
0

您可以像这样手动调用 dispose 方法:

var reader= new StreamReader(stream);

try
{
    var doc = reader.ReadToEnd();
}
finally
{
    reader.Dispose();
}

这实际上等同于 using 语法。但是 using 仍然是编写它的最短方式。

于 2013-06-25T10:31:19.723 回答
0

3 号操作通常需要 3 行。特别是如果每​​个操作都返回一些东西。

你有几个选择:

  1. 全部在一条线上。
  2. 显式调用Dispose().
  3. using..就像它的意图:)

如果您担心的是多余的行..您担心的是错误的事情。

于 2013-06-25T10:31:36.377 回答