rav*_*ven 4 .net using-statement objectdisposedexception
考虑以下功能:
private int GetSomethingFromFile(FileStream fs)
{
using (BinaryReader br = new BinaryReader(fs))
{
fs.Seek(0, SeekOrigin.Begin);
return br.ReadInt32();
}
}
Run Code Online (Sandbox Code Playgroud)
FileStream对象作为参数传入,BinaryReader使用using语句声明.当我尝试使用该FileStream对象时,在调用此函数后,它会抛出System.ObjectDisposedException.为什么FileStream对象与BinaryReader对象一起被丢弃?
这是一个非常好的问题,我不知道为什么决定它应该是这样的,但是唉它是这样记录的:
关闭:关闭当前阅读器和基础流.
如果你看看这个答案的问题我如何"叉"在.NET中的流?那么你会看到他在一个名为MiscUtil的库中引用了一个名为NonClosingStreamWrapper的类,@ Jon Skeet编写了这个类,你可以用它来环绕流以防止它被关闭.
您会像这样使用它(对于您的示例):
private int GetSomethingFromFile(FileStream fs)
{
using (var wrapper = new NonClosingStreamWrapper(fs))
using (BinaryReader br = new BinaryReader(wrapper))
{
fs.Seek(0, SeekOrigin.Begin);
return br.ReadInt32();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3236 次 |
| 最近记录: |