[英]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方法將嘗試第二次處置其資源。”
它指出,當您對資源調用Dispose
時,它將處置它所擁有的所有資源。 所以這里的內部資源csEncrypt
把握外部資源msEncrypt
上csEncrypt.Dispose
它會配置msEncrypt
為好。
稍后將調用msEncrypt.Disopse
,因此代碼分析警告您有關多次調用Dispose
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.