一尘不染

是否Stream.Dispose总是调用Stream.Close(和Stream.Flush)

c#

如果我有以下情况:

StreamWriter MySW = null;
try
{
   Stream MyStream = new FileStream("asdf.txt");
   MySW = new StreamWriter(MyStream);
   MySW.Write("blah");
}
finally
{
   if (MySW != null)
   {
      MySW.Flush();
      MySW.Close();
      MySW.Dispose();
   }
}

MySW.Dispose()即使提供了关闭服务,我也可以打电话并跳过它吗?是否有任何Stream隐含无法按预期工作(例如CryptoStream)?

如果没有,那么下面的代码就是错误的:

using (StreamWriter MySW = new StreamWriter(MyStream))
{
   MySW.Write("Blah");
}

阅读 708

收藏
2020-05-19

共1个答案

一尘不染

我是否可以仅调用MySW.Dispose()并跳过Close(即使提供了它)?

是的,这就是它的目的。

是否有任何Stream实施无法按预期工作(例如CryptoStream)?

可以肯定地假设,如果一个对象实现IDisposable,它将正确处理自己。

如果不是,那将是一个错误。

如果没有,那么下面的代码就是错误的:

不,该代码是处理实现的对象的推荐方式IDisposable

有关“完成并处置”的公认答案中提供了更出色的信息-调用哪个?

2020-05-19