在 C# 中处理多个对象时解决 CA2202 警告
由于可能重复 CryptoStream
调用,以下 C# 代码示例在 Visual Studio 代码分析中针对 MemoryStream
和 Dispose
生成 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中文网其他相关文章!