gpt4 book ai didi

c# - 代码分析 - 不要多次处理对象

转载 作者:太空狗 更新时间:2023-10-29 18:11:07 25 4
gpt4 key购买 nike

我已尝试遵循此方法的代码分析规则:

public static string Encrypt(string password)
{
string myPassword = string.Empty;
if (!string.IsNullOrEmpty(password))
{
myPassword = password;
byte[] Value = System.Text.Encoding.UTF8.GetBytes(myPassword);
SymmetricAlgorithm mCSP = new RijndaelManaged();
mCSP.Key = _key;
mCSP.IV = _initVector;
using (ICryptoTransform ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV))
{
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
{
cs.Write(Value, 0, Value.Length);
cs.FlushFinalBlock();
cs.Close();
myPassword = Convert.ToBase64String(ms.ToArray());
}
}
}
}
return myPassword;
}

添加了所有 Try {} Finaly{} block ,但它仍然对我大喊我不遵守规则 2202。谁能帮我解决这个问题?

是的,我已经阅读了关于这个主题的其他帖子并尝试应用它,但最后我仍然收到相同的消息。

最佳答案

要消除 cs 的 CA2202 警告,只需删除对其 Close 方法的调用即可。

ms 的 CA2202 问题稍微复杂一点。出现警告是因为 CryptoStream 厚颜无耻地处理它通过构造函数接收到的流,这意味着对 ms.Close() 的调用不当,您可以避免。好消息是,这种不合时宜的处置对您的情况没有副作用,双重处置也是如此,因此您可以放心地使用 SuppressMessageAttribute 并忽略该问题。 (对于您实际上需要通过诸如 CryptoStream 之类的东西传递流以在其无法阻止的处置中幸存下来的情况,通常的技术是使用流子类,其处置可以通过其实例化代码来阻止。)

关于c# - 代码分析 - 不要多次处理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com