c# – 为什么流处理时,它的作者被处置?
发布时间:2020-12-15 04:21:54 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: using (var ms = new MemoryStream()){ using(var writer = BinaryWriter(ms)) { writer.Write(/*something*/); writer.Flush(); } Assert.That(ms.Length 0); // Throws ObjectDisposedException} 一方面,一次性物品应该处置它的资源;我得
请考虑以下代码:
using (var ms = new MemoryStream()) { using(var writer = BinaryWriter(ms)) { writer.Write(/*something*/); writer.Flush(); } Assert.That(ms.Length > 0); // Throws ObjectDisposedException } 一方面,一次性物品应该处置它的资源;我得到了,但另一方面,对象没有创建,并且不拥有这个资源,它提供了 – >调用代码应该负责…不? 我不能想到这样的其他情况,但是在任何接收一次性物品的类的框架中它是否符合自己处置的一致性模式? 解决方法
有一个隐含的假设,你每个流只能有一个作者,所以作者为了方便而承担了流的所有权 – 然后你有一件事要清理.
但我同意这并不总是真的,而且经常不方便.一些实现(例如DeflateStream,GZipStream)允许您选择.否则唯一真正的选择是在写入器和底层流之间注入虚拟流; IIRC在Jon Skeet的“MiscUtil”库中有一个NonClosingStreamWrapper,它完全是这样的:http://www.yoda.arachsys.com/csharp/miscutil/ 使用方式如下: using (var ms = new MemoryStream()) { using(var noClose = new NonClosingStreamWrapper(ms)) using(var writer = BinaryWriter(noClose)) { writer.Write(/*something*/); writer.Flush(); } Assert.That(ms.Length > 0); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – Gmail API – 如何正确解析邮件正文数据?
- XML:DTD、DTD定义元素、DTD定义属性、DTD定义实体
- .net Core AJAX使用Header传递参数,以JsonResult返回信息
- ruby-on-rails – 在rails控制器中获取Carrierwave上传的文
- ruby-on-rails – 如何扩展核心Rails FormBuilder字段
- 开源 – 有没有人找到一个好的开源ajax日历控件(不是弹出日
- ruby-on-rails – 授予对Rails应用程序的API访问权限的最佳
- Flex Viewer 开发教程(7)Widget与服务器交互
- VB.NET+SQLCE操作数据库简单例子
- AS3的 XML二进制化