c# – 将’IDisposable’嵌套在一个’using’语句中
关于在单个’using’语句中使用嵌套一次性用法的快速问题:我应该写出每个一次性使用语句,还是可以将它们嵌入一个?例:
using( FileStream inFile = new FileStream( "myFile.txt",FileMode.Open ) ) using( GZipStream gzip = new GZipStream( inFile,CompressionMode.Decompress ) ) using( FileStream outFile = new FileStream( "myNewFile.txt",FileMode.CreateNew ) ) { gzip.CopyTo( outstream ); } 与 using( GZipStream gzip = new GZipStream( new FileStream( "myFile.txt",FileMode.Open ),FileMode.CreateNew ) ) { gzip.CopyTo( outstream ); } 好奇的是,当块执行完毕时,来自“myFile.txt”的未命名的FileStream会被清除,因为它位于带有GZipStream的using语句中,或者它是否保持打开状态并且需要在此之后的某个时间进行清理. 编辑: 解决方法
它取决于构造函数,GZipStream处理您在处理它时传入的流,除非您使用其中一个接收bool并将true传递给leaveOpen.
但是你这样做会冒风险.如果GZipStream抛出ArgumentException,因为流的CanRead属性为false,则传入的流不会被处理掉. 就个人而言,我宁愿不依赖“不会出错的东西”,而是通常采用防御性编码并使用3语句版本.
如果这是你的问题,那么答案是:不,只有被声明的对象(使用var whatever = …)将被处理,创建的任何其他对象都依赖于任何“外部”对象的代码.实现“链调用”Dispose()方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- pull解析XML
- Nand Flash基础知识与坏块管理机制的研究
- .net – DateTime的自定义JavaScriptConverter?
- 正则表达式
- 56.Oracle杂记——Oracle常用动态视图v$db_cache_advice
- Vue2.0 实现单选互斥的方法
- TypeError: Error #1034: 强制转换类型失败:无法将 "&#
- .net – ‘Newtonsoft.Json’已经为’Microsoft.CSharp’定
- 在VB.NET中选择Case Fall through with Not Condition
- Swift之Umbrella header .h not found