CA2202不要多次处置对象,多次处置对象是优先处置的对象

本文关键字:对象 CA2202 | 更新日期: 2023-09-27 17:50:17

我在下面的代码中得到CA2202警告

using (MemoryStream msDecrypt = new MemoryStream(encrypted))
        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
        return srDecrypt.ReadToEnd();

这段代码触发msDecrypt和csDecrypt都有自己的using语句。是否有要处理的首选对象?外部(msDecrypt)或内部(csDecrypt)-如果是,为什么?

这个问题不是这个线程的重复,因为我想知道一般来说-哪个更好处理-内部/后面的对象或外部/前面的对象,为什么?

CA2202不要多次处置对象,多次处置对象是优先处置的对象

如果向下滚动到Example一节,就会解释这一点。简而言之,这是由于内部using块中的资源也包含外部using块的资源造成的。当你在内部资源上调用Dispose时,它也会释放包含在其中的外部资源。

建议的修复是将整个事情包装在try块中,将内部资源放在using块中,然后在finally块内部的外部资源上调用Dispose,如果它还不是null

为了更直接地回答你的问题,内部资源应该是最好处理的资源。