多次处理对象错误。 CA2202。有没有更好的办法?

2024-01-19

如何确保以下代码以更好的方式处理所有对象?目前,代码分析告诉我

错误 45 CA2202:Microsoft.Usage:对象“ns”可以在方法“CPCommunicator.GetResults(string)”中多次处置。为了避免生成 System.ObjectDisposeException,您不应在一个对象上多次调用 Dispose。:第 64 行、第 65 行

NetworkStream ns = null;
StreamWriter requestStream = null;
TextReader responseStream = null;

var results = new StringBuilder();

try
{
    ns = new NetworkStream(CreateConnection(), true);
    requestStream = new StreamWriter(ns);
    requestStream.Flush();
    responseStream = new StreamReader(ns);

    requestStream.Write(reportData);
    requestStream.Flush();
    while (responseStream.Peek() != -1)
    {
        var currentLine = responseStream.ReadLine();
        results.Append(currentLine);
        results.Append("\n");
    }
}
finally
{
    if (requestStream != null) requestStream.Close();
    if (responseStream != null) responseStream.Close();
    if (cpNetworkStream != null) cpNetworkStream.Close();
}

由于requestStream和responseStream都使用ns,它们都会处理ns,所以为了满足代码分析警告,我必须注释掉finally块中的最后两个close方法。但我真的想这样做吗????


是的,恕我直言,你真的应该只调用一次。

或者,您可以在 ns 上使用 using 语法,这使得整个情况更加清晰。

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

多次处理对象错误。 CA2202。有没有更好的办法? 的相关文章

随机推荐

  • 选择带有“over partition by”的案例

    正确的语法是什么 或者是否可以在 select 中使用 case 并在其中进行分区 使用SQL Server 2012 a unique id b a string xf c values d values e values select
  • 使用 Qualifier 和 InjectionPoint 作为 @HttpParam 在 CDI/WELD 中实现 @RequestParam

    玻璃鱼错误 INFO Initializing Mojarra 2 1 6 SNAPSHOT 20111206 for context NNTPjsf INFO WEB0671 Loading application NNTPjsf at
  • PHP图像上传-重命名而不丢失扩展名?

    我目前有 file name HTTP POST FILES uid name random digit rand 0000 9999 new file name random digit file name path uploads im
  • Xcode“使用未声明的标识符”

    我知道很多人问这个问题 但所有答案都是特定的应用程序 所以我不明白如何为我的应用程序工作 tableData NSArray arrayWithObjects Chocolate Brownie Mushroom Risotto nil N
  • 使用 jQuery 发送新的 ajax 请求之前添加延迟

    我有一个指向 html 页面的链接列表 ul li a href assets data item1 html Item 1 a li li a href assets data item2 html Item 2 a li li a hr
  • 签名 APK:失败 [INSTALL_FAILED_DEXOPT].. 已更新

    生成的 app release apk 在我的设备上不起作用 但 app debug apk 工作正常 Update 转到我的应用程序的先前版本后 in my MainActivity我有这个字符串 public class MainAct
  • 获取codeigniter中复选框的多个值

    我目前正在做一个项目 我有一个复选框 用户将在其中选择公司提供的服务类型 当我尝试在控制器中发布所选的服务 例如检查了 2 个服务 时 我只获得一项服务 问题是如何获取复选框中的多个值 注意 我还尝试在控制器中使用 foreach 但收到一
  • GitHub:限制对特定分支的访问[重复]

    这个问题在这里已经有答案了 有没有办法限制对存储库中某些分支的访问 我们有生产和主分支 有时会因流氓推送而变得混乱 Not with GitHub in the same repo as opposed to local repos whi
  • 错误:启动 my_project docker 设置时,池与此地址空间上的其他池重叠

    我正在尝试设置 docker 但收到以下错误 错误 池与此地址空间上的其他池重叠 请问我应该怎么解决呢 您能否向我们提供您运行的命令以及您的docker compose yml请归档 您遇到的错误表明您存在网络地址冲突 要检查您是否可以运行
  • GitHub Actions:仅针对某些拉取请求基础分支运行步骤

    我已经在 GitHub Actions 上工作了一段时间了 我们已经制定了指定的工作流程 工作流程是用 yaml 编写的 我正在尝试放一些if的条件为github ref并且 yaml 的该块在运行时被跳过 这意味着 如果针对 X 分支提出
  • 如何从循环内正确修改Python循环的迭代器

    我基本上需要的是检查列表中的每个元素 如果符合某些条件 我想将其从列表中删除 比如说 list a b c d e 我基本上想写 原则上而不是我尝试实现的实际代码 如果列表中的元素是 b 或 c 则将其从列表中删除并获取下一个 But fo
  • 将 SVG 转换为 png 或其他?

    由于在 iPython 笔记本中显示 SVG 文件的内容非常容易 是否还有一种方法 也很简单 来获取我们在 png 文件或其他文件中看到的内容 from IPython display import SVG SVG filename ima
  • sonar-plugin-api 4.5.2 的 Javadoc

    为了开发我自己的SonarQube插件 我正在搜索sonar plugin api 4 5 2的javadoc api 但我在互联网上没有找到它 对于 3 x x 版本 maven 还下载了 jar 的源代码 因此我能够从中生成 javad
  • SWI Prolog 中的 Python pickling 等效吗?

    我有一个 Prolog 程序 我正在对所有达到一定长度的字符串进行强力搜索 我正在检查哪些字符串与特定模式匹配 不断添加模式 直到希望找到一组涵盖所有字符串的模式 我想将哪些存储到与我的任何模式都不匹配的文件中 这样当我添加新模式时 我只需
  • mprotect() 的替代方法

    mprotect 系统调用保护页边界内的内存区域 int mprotect void addr size t len int prot Here len应该是页面大小的倍数 有没有办法只保护几个连续的地址 这些地址不与页边界对齐 即len
  • 使用 Yocto 构建固件的最佳实践

    我有一个基于 rocko 分支的工作 Yocto 构建系统 该系统正在为基于 ARM 的目标板生成图像 该板上的芯片之一是一个基于 ARM 的小型微控制器 与主 CPU 分离 它需要加载我必须构建的固件映像 制定构建此微控制器固件的方法很容
  • 如何将 DD-MM-YYYY 日期格式字符串转换为 YYYY-MM-DD 日期格式字符串或 Objective-C 中的 NSDate 对象?

    我已经从 XML 中读取了日期 它给了我返回日期的字符串DD MM YYYY 但是当我想将它添加到我的核心数据数据库时 SQLite 对我进行了错误的排序 因此我必须将其转换为日期格式或字符串 例如 YYYY MM DD 但 SQLite
  • Fody 仅在 MSBuild 16 及更高版本上受支持。当前版本:15

    Visual Studio 2017 让我知道今天早上对 Fody 版本 5 进行了升级 我接受并更新了 Fody 和 PropertyChanged Fody 的 NuGet 包 现在 我的项目 解决方案将不再构建 错误是 Fody 仅在
  • 如何使用.NET Timer类在特定时间触发事件?

    我希望在我的应用程序中触发一个事件 该事件在一天中的某个时间 例如下午 4 00 连续运行 我考虑每秒运行一次计时器 当时间等于下午 4 00 时运行该事件 这样可行 但我想知道是否有办法只在下午 4 00 回调一次 而不必继续检查 像这样
  • 多次处理对象错误。 CA2202。有没有更好的办法?

    如何确保以下代码以更好的方式处理所有对象 目前 代码分析告诉我 错误 45 CA2202 Microsoft Usage 对象 ns 可以在方法 CPCommunicator GetResults string 中多次处置 为了避免生成 S