CA2202, nasıl bu davayı çözmek için
Herkes aşağıdaki kodu tüm CA2202 uyarıları kaldırmak için nasıl bana söyleyebilir misiniz?
public static byte[] Encrypt(string data, byte[] key, byte[] iv)
{
using(MemoryStream memoryStream = new MemoryStream())
{
using (DESCryptoServiceProvider cryptograph = new DESCryptoServiceProvider())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
using(StreamWriter streamWriter = new StreamWriter(cryptoStream))
{
streamWriter.Write(data);
}
}
}
return memoryStream.ToArray();
}
}
7 CA2202 uyarı : Microsoft.Kullanımı : Nesne, 'cryptoStream' bir kez daha bertaraf edilebilir yöntem 'CryptoServices.(String, byte[], byte []) şifrelemek'. Bir Sistemin oluşturulmasını engellemek için.Bir nesne üzerinde birden çok kez Elden aramalısın değil ObjectDisposedException.: Çizgiler: 34
8 CA2202 uyarı : Microsoft.Kullanımı : Nesne, 'memoryStream' bir kez daha bertaraf edilebilir yöntem 'CryptoServices.(String, byte[], byte []) şifrelemek'. Bir Sistemin oluşturulmasını engellemek için.Bir nesne üzerinde birden çok kez Elden aramalısın değil ObjectDisposedException.: Çizgiler: 34, 37
Visual Studio Kod Analizi bu uyarıları görmek gerekir (bu değil c# derleyici uyarısı).
CEVAP
Bu durumda uyarıları bastırmak gerekir. İmar ile ilgili kod tutarlı olmalıdır, ve diğer sınıfları oluşturulur ve aynı zamanda Dispose
Ara onları tek kullanımlık sahipliğini dikkat gerek yok.
[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")]
public static byte[] Encrypt(string data, byte[] key, byte[] iv) {
using (var memoryStream = new MemoryStream()) {
using (var cryptograph = new DESCryptoServiceProvider())
using (var cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write))
using (var streamWriter = new StreamWriter(cryptoStream)) {
streamWriter.Write(data);
}
return memoryStream.ToArray();
}
}
GÜNCELLEME:IDisposable.Dispose belgelerinde bu okuyabilirsiniz:
Eğer bir nesne yöntemi bir kez daha deniyor Atmayın eğer nesne ilk mesajdan sonra tüm çağrıları görmezden gerekir. Nesne eğer yöntemdir Atmayın onun birden çok kez aradım eğer bir istisna atmak gerekir.
Olabilir savundu bu kural var, böylece geliştiriciler istihdam using
deyimi akil bir çağlayan tek kullanımlık gibi oldum yukarıda gösterilen (ya da belki bu sadece hoş bir yan etki). Aynı şekilde, daha sonra, CA2202 hizmet vermektedir yararı ve proje-bilge bastırılmış olmalıdır. Gerçek suçlu* *6, CA1065 çaresine bakılmalı hatalı bir uygulama ise sizin sorumluluğunuz altında ise () olur.
Çözmek için nasıl "Eklenti yürütm...
Nasıl jQuery kullanarak HTML varlıklar...
svn: çözmek için nasıl "yerel düz...
iPhone hata Ayıklama: 'süreci içi...
Nasıl bir kabuk içinde sembolik bağlar...