将“IDisposable”嵌套在单个“using”语句中

2023-11-22

关于在单个“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 );
}

vs.

using( GZipStream gzip = new GZipStream( new FileStream( "myFile.txt", FileMode.Open ), CompressionMode.Decompress ) )
using( FileStream outFile = new FileStream( "myNewFile.txt", FileMode.CreateNew ) )
{
    gzip.CopyTo( outstream );
}

只是好奇当该块执行完毕时,“myFile.txt”中的未命名 FileStream 是否会被清理,因为它位于 GZipStream 的 using 语句中,或者它保持打开状态并且需要在之后的某个时间清理。

编辑: 需要明确的是,我并不是在询问嵌套 using 语句。我问的是,在另一个 IDisposable 的“using”语句中创建的 IDisposable 是否会在块末尾被释放。任何关于为什么或为什么不的解释将不胜感激。


这取决于构造函数,GZipStream处置您在处置时传入的流,除非您使用其中之一超载接受一个布尔值,然后你传入true to leaveOpen.

然而,这样做确实有风险。如果GZipStream抛出一个ArgumentException因为CanRead流的属性是false传入的流不会被丢弃。

就我个人而言,我宁愿不依赖“不会出错的事情”,而是通常进行防御性编码并使用 3 语句版本。


编辑:为了明确起见,我不是在询问嵌套 using 语句。 我问的是里面是否创建了一个 IDisposable 另一个 IDisposable 的 'using' 语句将在最后被处理 块的。任何关于为什么或为什么不的解释将不胜感激。

如果这是您的问题,那么答案是:不,只有声明的对象被分配给 (using var whatever = ...)将被处置,创建的任何其他对象都依赖于要实现“链调用”的“外部”对象的代码Dispose()方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将“IDisposable”嵌套在单个“using”语句中 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐

  • 如何在对象数组中查询算法数据

    我有一个数据数组 其中 Algolia 索引中包含多个对象 如下所示 status available startDate 2000 10 20 endDate 2022 10 20 availablePlatform 1 2 3 avai
  • 将表标准化为第三范式

    这道题显然是一道家庭作业题 我听不懂我的教授 也不知道他在选举期间说了什么 我需要一步一步地进行说明 首先将下表规范化为 1NF 然后是 2NF 然后是 3NF 我感谢任何帮助和指导 好吧 我希望我都记得正确 让我们开始吧 Rules 让它
  • 如何使用节点谷歌客户端 API 来获取已获取令牌的用户配置文件?

    通过获取用户个人资料信息curl curl i https www googleapis com userinfo v2 me H Authorization Bearer a google account access token 通过获
  • 更改默认 JLabel 字体

    我将如何为所有人设置默认字体JLabel实例 而不是为每个设置字体JLabel独立 Use UIManager定义 JLabel 的默认字体 import java awt FlowLayout import java awt Font i
  • 收益返回和异常处理[重复]

    这个问题在这里已经有答案了 我刚刚遇到一个使用yield return 的方法 但没有抛出我期望的ArgumentException 的情况 我在这里用最简单的类重建了这个案例 class Program static void Main
  • 将十六进制字符(连字)转换为 utf-8 字符

    我有一个从 pdf 文件转换而来的文本内容 文本中有一些不需要的字符 我想将它们转换为 utf 8 字符 例如 人工免疫系统 转换为 Arti 社会免疫系统 像一个字符一样转换 我用了gdex学习ascii角色的价值 但我不知道如何将其替换
  • 如何将WebView设置为非全屏?

    我正在尝试在我的 Android 应用程序中使用 WebView 我正在代码端 而不是 XML 创建我的 webview 我的问题是 当我调用 webview 的 loadUrl 方法时 webview 进入全屏模式 如何保持 webvie
  • 尝试编译此代码是否会导致 IDE 终止或编译器无法运行?

    提防Exit内联函数中的命令用法 我这里一直使用Delphi XE3 Symptom 在某些情况下 当调用包含以下内容的内联函数时Exit命令 以及返回值使用内联函数的directly in WriteLn 编译器报告错误消息 dcc 退出
  • 二进制 XML 文件第 8 行:膨胀类片段时出错,Google 地图

    在此应用程序中 我尝试添加功能性 V2 谷歌地图 我已经查看了大多数关于创建活动 获取地图密钥以及创建 xml 文件的教程 以尝试看看我是否错过了任何步骤 我已经完成了 4 次 但事实并非如此好像我错过了任何一步 Here是我使用的网站 当
  • “SecretKeyFactory 不可用”是什么意思?

    这有什么问题吗 for Object obj java security Security getAlgorithms Cipher System out println obj javax crypto SecretKeyFactory
  • 如何将颜色条位置向右移动

    I draw a scatter chart as below 代码是 sc plt scatter x y marker o s size r c clr vmin lb vmax ub cmap mycm alpha 0 65 cbar
  • 在sql存储过程中传递表名

    是否可以将表名作为输入参数传递给存储过程 例如 create procedure test tablename char 10 as begin select from tablename end go 我知道这行不通 那么 如果我想将表名
  • iOS 实时确定名片的角点

    我想实现像这个应用程序这样的名片检测功能 https scanbot io 相机应检测到名片并自动拍摄它的照片 仅名片 我的想法是使用BradLarson s GPUImage库 检测角点 使用 Harris 角点检测算法 计算获得的角点的
  • 使用 ClosedXML C# 库,在尝试保存时如何找出导致此错误的数据

    我有一个 C 应用程序 可以使用以下命令导出到 Excel封闭XML 它工作正常 但遇到了一个问题 当我点击时 var ms new MemoryStream workbook SaveAs ms 我得到一个例外 hexadecimal v
  • 名为 Tuple 的 C# 可以用作 MVC 页面模型类型吗?

    在 C 7 中 您可以命名元组 var foo Name Joe Age 42 如果我使用以下方法将其传递给 MVC 模型 return View foo 那么cshtml文件中应该使用什么语法来声明模型呢 虽然这不起作用 但类似 mode
  • 有人可以解释一下 Big-Oh 如何与求和一起使用吗?

    我知道这严格来说不是一个编程问题 但它is一个计算机科学问题 所以我希望有人能帮助我 I ve been working on my Algorithms homework and figuring out the Big Oh Big O
  • 如何通过另一个计算列使用一个计算列

    我在 Sqlite 中有一个查询涉及复杂的列计算 比方说 SELECT 1 1 AS a 我想将此计算选择为a 但我还需要将其用作另一个计算的组成部分 SELECT 1 1 AS a a 2 AS b 不幸的是这会产生错误 Error no
  • 是否可以使用 Oboe 库同时在 Android 中打开 2 个麦克风?

    我正在尝试使用 google 打开 2 个麦克风流Oboe对于每个麦克风 像这样的库 oboe AudioStreamBuilder builder builder setChannelCount channelCount gt setDi
  • Android Studio 中的 Gradle 错误

    我将一个 Android 项目从 Eclipse 导入到 Android Studio 但是当我编译时 出现这些错误 他们的意思是什么 Gradle org gradle api plugins PluginInstantiationExc
  • 将“IDisposable”嵌套在单个“using”语句中

    关于在单个 using 语句中使用嵌套一次性的快速问题 我应该写出每个一次性的 using 语句 还是可以将它们嵌套到一个语句中 例子 using FileStream inFile new FileStream myFile txt Fi