为了账号安全,请及时绑定邮箱和手机立即绑定

CA 2202,如何解决这个案子

CA 2202,如何解决这个案子

守着一只汪 2019-07-03 17:04:51
CA 2202,如何解决这个案子有人能告诉我如何从下面的代码中删除所有CA 2202警告吗?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 CA 2202:Microsoft.Usage:Object‘crypStream’可以在方法‘CryptoServices.Encrypt(字符串、字节[])中多次释放。若要避免生成System.ObjectDisposedException,不应对象调用Dispose超过一次。:行:34警告8 CA 2202:Microsoft.Usage:Object‘MemyStream’可以在方法‘CryptoServices.Encrypt(字符串、字节[])中多次释放。若要避免生成System.ObjectDisposedException,不应对象调用Dispose超过一次。:行:34、37您需要VisualStudio代码分析来查看这些警告(这些警告不是c#编译器警告)。
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

嗯,这是准确的,在这些流上的dist()方法将被多次调用。StreamReader类将获得加密流的“所有权”,因此处理StreamWriter也将释放密码流。类似地,CryptoStream类接管内存流的责任。

这些并不完全是真正的bug,这些.NET类对多个Dispose()调用具有弹性。但是,如果您想摆脱警告,那么您应该删除这些对象的Using语句。在推理如果代码抛出异常会发生什么时,你会感到有些痛苦。或者用属性关闭警告。或者忽略这个警告,因为它是愚蠢的。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 606 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信