【发布时间】:2020-06-29 08:36:56
【问题描述】:
我有一个实现IDisposable 的类和一个返回Stream 的方法。
我想知道直接返回流更好:
public Stream GetStream()
{
var stream = new FileStream(_fileName, FileMode.Open);
return stream;
}
或者最好返回一个Func<stream>,让调用者决定何时“触发”:
public Func<Stream> GetStream()
{
var openStream() => new FileStream(_fileName, FileMode.Open);
return openStream;
}
我已经尝试过自己的研究,虽然似乎有很多类似的答案,但我还没有找到一个完全像这样的答案。查看现有答案,我仍然不确定一个是否明显优于另一个。
我认为第二种方法提供了更大的灵活性,因为我们不返回打开的流,我们打开流并允许用户在适合他们时打开流可能更可取。例如:
var listOfStreamFunc = new List<Func<Stream>>(){
somewhere1.GetStreamFunc(),
somewhere2.GetStreamFunc()
};
SomeMethod(listOfStreamFunc);
然后我们可以将流的打开推迟到SomeMethod,这是有利的,因为仅在必要时才打开流,同时减少了因意外过早关闭流而误用的可能性,例如
using (x = GetStream()){
SomeMethod(x);
}
有什么理由不选择第二种选择吗?
【问题讨论】: