我在我正在开发的一个项目中发现了以下代码,我很好奇是否可以写得更简洁。
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();
我很好奇是否可以写得更简洁。
在这种特定情况下,您可以做的第一件事就是省略额外的大括号:
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();
另请阅读: