簡體   English   中英

CA2202:請勿多次放置對象

[英]CA2202: Do not dispose objects multiple times

我有這樣的課...

public class Class1
{
    public Class1()
    {
        byte[] plainText = new byte[1024];
        using (MemoryStream msEncrypt = new MemoryStream())
        {
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                csEncrypt.Write(plainText, 0, plainText.Length);
                csEncrypt.FlushFinalBlock();
                csEncrypt.Flush();
                encrypted = msEncrypt.ToArray();
            }
        }
    }
    public ICryptoTransform encryptor { get; set; }
    public byte[] encrypted { get; set; }
}

代碼分析將引發以下警告。 請勿多次放置物體。

http://msdn.microsoft.com/zh-CN/library/ms182334.aspx

我無法在以上[示例部分]的文章中理解此行。“嵌套的using語句(在Visual Basic中使用)可能會違反CA2202警告。如果嵌套內部using語句的IDisposable資源包含該資源,對於外部using語句,嵌套資源的Dispose方法釋放所包含的資源。這種情況發生時,外部using語句的Dispose方法將嘗試第二次處置其資源。”

此代碼的IL

它指出,當您對資源調用Dispose時,它將處置它所擁有的所有資源。 所以這里的內部資源csEncrypt把握外部資源msEncryptcsEncrypt.Dispose它會配置msEncrypt為好。

稍后將調用msEncrypt.Disopse ,因此代碼分析警告您有關多次調用Dispose

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM