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)-如果是,为什么?
这个问题不是这个线程的重复,因为我想知道一般来说-哪个更好处理-内部/后面的对象或外部/前面的对象,为什么?
如果向下滚动到Example一节,就会解释这一点。简而言之,这是由于内部using
块中的资源也包含外部using
块的资源造成的。当你在内部资源上调用Dispose
时,它也会释放包含在其中的外部资源。
建议的修复是将整个事情包装在try
块中,将内部资源放在using
块中,然后在finally
块内部的外部资源上调用Dispose
,如果它还不是null
。
为了更直接地回答你的问题,内部资源应该是最好处理的资源。