首页 >后端开发 >C++ >在 C# 中处置多个对象时如何处理 CA2202 警告?

在 C# 中处置多个对象时如何处理 CA2202 警告?

DDD
DDD原创
2025-01-23 11:07:12633浏览

How to Handle CA2202 Warnings When Disposing Multiple Objects in C#?

在 C# 中处理多个对象时解决 CA2202 警告

由于可能重复 CryptoStream 调用,以下 C# 代码示例在 Visual Studio 代码分析中针对 MemoryStreamDispose 生成 CA2202 警告。 建议的方法是抑制这些警告,而不是修改代码。

抑制 CA2202 警告:首选解决方案

考虑到代码中一致的对象处理模式,抑制警告比更改代码更好。 对多个 Dispose 调用的担忧是没有根据的,因为 IDisposable.Dispose 方法被设计为幂等的(忽略第一个调用之后的后续调用)。 using 语句优雅地处理了这个问题。

以下是抑制警告的方法:

<code class="language-csharp">[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")]
public static byte[] Encrypt(string data, byte[] key, byte[] iv) {
  using (var memoryStream = new MemoryStream()) {
    using (var cryptograph = new DESCryptoServiceProvider())
    using (var cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write))
    using (var streamWriter = new StreamWriter(cryptoStream)) {
      streamWriter.Write(data);
    }
    return memoryStream.ToArray();
  }
}</code>

压制的理由

IDisposable.Dispose 方法文档明确指出,第一个之后的调用将被忽略。 代码中的嵌套 using 语句创建了一个场景,其中多个对象管理处置,但这由框架正确处理。因此,CA2202 警告是不必要的,可以安全地抑制。

以上是在 C# 中处置多个对象时如何处理 CA2202 警告?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn