相关疑难解决方法(0)

CA2202,如何解决这种情况

任何人都可以告诉我如何从以下代码中删除所有CA2202警告?

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

警告7 CA2202:Microsoft.Usage:对象'cryptoStream'可以在方法'CryptoServices.Encrypt(string,byte [],byte [])'中多次处理.为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose:Lines:34

警告8 CA2202:Microsoft.Usage:对象'memoryStream'可以在方法'CryptoServices.Encrypt(string,byte [],byte [])'中多次处理.为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose:Lines:34,37

您需要Visual Studio代码分析才能看到这些警告(这些不是c#编译器警告).

.net c# code-analysis fxcop

101
推荐指数
5
解决办法
3万
查看次数

同一个使用块中的多个变量

我目前正在使用两个对象,如下所示:

using (var ms = new MemoryStream())
using (var bw = new BinaryWriter(ms))
{
    // work with ms and bw, both referenced here
}
Run Code Online (Sandbox Code Playgroud)

它工作"很好",实际上也是一个答案.但是,当我运行VS2012的代码分析工具时,我得到一个警告:

CA2202  Do not dispose objects multiple times   
Object 'ms' can be disposed more than once in method '<my method name>'. 
To avoid generating a System.ObjectDisposedException you should not 
call Dispose more than one time on an object.
Run Code Online (Sandbox Code Playgroud)

这让我相信可能有另一种方法来处理这种情况,但我不知道它是什么.

有谁知道在一个using块中以无警告方式使用两个对象的"正确"方法是什么?

c# dispose idisposable using using-statement

5
推荐指数
1
解决办法
1980
查看次数

标签 统计

c# ×2

.net ×1

code-analysis ×1

dispose ×1

fxcop ×1

idisposable ×1

using ×1

using-statement ×1