我在以下代码中收到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) - 如果是这样,为什么?
这个问题不是这个thread的重复,因为我一般都想知道 - 哪个更好地处理 - 内部/后期对象或外部/早期对象以及为什么?
答案 0 :(得分:2)
如果向下滚动到示例部分,则会解释here。简而言之,这是由内部using
块中的资源引起的,该资源也包含外部using
块的资源。当您在内部资源上调用Dispose
时,它还会释放其中包含的外部资源。
建议的修复方法是将整个内容包装在try
块中,将内部资源放在using
块中,然后在Dispose
内的外部资源上调用finally
{1}}阻止,如果它还不是null
。
为了更直接地回答你的问题,内部资源应该是最好处理的资源。