匿名StreamReader会自动关闭吗?

问题描述 投票:0回答:1

我在我正在开发的一个项目中发现了以下代码,我很好奇是否可以写得更简洁。

using (var stream = new FileStream(CustomSettingsFile.FullName, FileMode.Open, FileAccess.Read))
{
    using (var reader = new StreamReader(stream))
    {
        var data = reader.ReadToEnd();
    }
}

首先,使用FileStream有什么好处?我知道 StreamReader 可以直接获取文件路径。

using (var reader = new StreamReader(CustomSettingsFile.FullName))
{
    var data = reader.ReadToEnd();
}

其次,如果我只使用一次阅读器,我不能将其匿名并省略使用吗?

var data = new StreamReader(CustomSettingsFile.FullName).ReadToEnd();
c# filestream
1个回答
2
投票

我很好奇是否可以写得更简洁。

在这种特定情况下,您可以做的第一件事就是省略额外的大括号:

using (var stream = new FileStream(CustomSettingsFile.FullName, FileMode.Open, FileAccess.Read))
using (var reader = new StreamReader(stream))
{
    var data = reader.ReadToEnd();
}

首先,使用FileStream有什么好处?我知道 StreamReader 可以直接获取文件路径。

基于 当前实现 无,除了明确指定

FileMode
FileAccess
之外,尽管据我所知
StreamReader
将使用相同的默认值。

其次,如果我只使用一次阅读器,我不能将其匿名并省略使用吗?

不。使用完非托管资源后,您需要确定地释放它们。一般经验法则:如果某些东西实现了

IDisposable
那么它应该被处置(例如通过处理异常的
using
)。

请注意,从 C# 8.0 开始,在某些情况下您可以利用 using 声明,这将在当前作用域末尾调用 dispose:

using var reader = new StreamReader(CustomSettingsFile.FullName);
var data = reader.ReadToEnd();

另请阅读:

© www.soinside.com 2019 - 2024. All rights reserved.