gpt4 book ai didi

c# - 为什么 Bitmap 会导致规则 CA2000,而 Image 不会?

转载 作者:太空狗 更新时间:2023-10-29 21:41:29 27 4
gpt4 key购买 nike

有很多关于 SO 的问题哀叹代码分析规则 CA2000 可能被 VS2010 过于严格地应用,但我似乎遇到了应该应用但没有应用的情况。

考虑以下代码:

Image srcImage = Image.FromFile(source);
Bitmap newImage = new Bitmap(newWidth, newHeight);

using (Graphics gr = Graphics.FromImage(newImage))
{
gr.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
}
newImage.Save(destination, ImageFormat.Jpeg);

现在,如果我在 Visual Studio 2010 中对此运行代码分析,它会提示 newImage 没有被处理(简单修复,将它放在另一个 using block 中),但它不会提示srcImage(它还有一个我从未调用过的 Dispose() 方法)。有谁知道为什么代码分析在这里不提示?

最佳答案

CA2000 和类似/相关的 CA2213 (DisposableFieldsShouldBeDisposed) 和 CA1001 (TypesThatOwnDisposableFieldsShouldBeDisposable) 规则对于如何识别一次性元素的“所有权”相当严格。如果使用实例构造函数直接在您的代码中创建实例,他们只会将您的代码视为一次性实例的所有者。由于您使用 Image.FromFile 为 srcImage 创建实例,因此该规则不会将您的代码识别为所有者。

如果您不同意此规则行为,您可能想在 https://connect.microsoft.com/visualstudio/feedback 创建错误报告. (如果您关心一次性字段规则,您可能想在使用时投票给现有的 https://connect.microsoft.com/VisualStudio/feedback/details/485291/typesthatowndisposablefieldsshouldbedisposable-rule-ca1001-is-too-permissive 建议。)

关于c# - 为什么 Bitmap 会导致规则 CA2000,而 Image 不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973830/

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