CA2202多次处理对象 - 这是首选的处置对象?

时间:2015-05-21 20:58:13

标签: c#

我在以下代码中收到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的重复,因为我一般都想知道 - 哪个更好地处理 - 内部/后期对象或外部/早期对象以及为什么?

1 个答案:

答案 0 :(得分:2)

如果向下滚动到示例部分,则会解释here。简而言之,这是由内部using块中的资源引起的,该资源也包含外部using块的资源。当您在内部资源上调用Dispose时,它还会释放其中包含的外部资源。

建议的修复方法是将整个内容包装在try块中,将内部资源放在using块中,然后在Dispose内的外部资源上调用finally {1}}阻止,如果它还不是null

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