1

我在尝试将我的流分配给另一个流并将其处理如下时遇到了一个异常

Stream str = new FileStream(somefile, FileMode.OpenOrCreate);
Stream newstr = str;
str.Dispose(); // I disposed only str and not new str

byte[] b = new byte[newstr.Length];// got exception here stating unable to access closed stream...

为什么......?我是 C# 新手,并且StreamStreamnamespace 中System.IO

4

1 回答 1

3

是的,当你打电话时str.DisposenewStr也被处置。这是因为Stream,与 .NET 中的所有类一样,都是引用类型。当你写的时候Stream newstr = str,你不是在创建一个新的Stream,你只是在创建一个新的引用 Stream

正确的写法是:

Stream str = new FileStream(somefile, FileMode.OpenOrCreate);
int strLen = str.Length;
str.Dispose(); 

byte[] b = new byte[strLen];

这将避免任何ObjectDisposedException's. 请注意,这int是一个值类型,因此当您编写时,int strLen = str.Length正在创建该值的新副本,并将其保存在变量中strLen。因此,即使在Stream处置后,您也可以使用该值。

于 2013-07-02T05:38:25.807 回答