我在尝试将我的流分配给另一个并将其处理如下时遇到异常
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#和Stream
的新用户,其中Stream
位于命名空间System.IO
中。
答案 0 :(得分:3)
是的,当您致电str.Dispose
时,newStr
也会被处理掉。这是因为Stream
与.NET中的所有类一样,都是reference types。当您撰写Stream newstr = str
时,您没有创建新的Stream
,而只需创建对相同 Stream
的新引用。
写这个的正确方法是:
Stream str = new FileStream(somefile, FileMode.OpenOrCreate);
int strLen = str.Length;
str.Dispose();
byte[] b = new byte[strLen];
这将避免任何ObjectDisposedException
。请注意,int
是value type,因此当您编写int strLen = str.Length
时, 创建值的新副本,并将其保存在变量{{1}中}}。因此,即使在处置strLen
之后,您也可以使用该值。