有很多问题值得我们感叹,VS2010的代码分析规则CA2000可能过于严格地应用了,但我似乎遇到了它应该被应用的情况,但不是。为什么位图会导致规则CA2000,但图像不会?
考虑下面的代码:
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没有被设置(简单的办法,把它放在另一个使用块) ,但它并没有抱怨srcImage(它也有一个Dispose()方法,我从来没有打电话)。有人知道为什么代码分析不会在这里抱怨吗?
我以为刚开始,但后来我看到了其他的CA2000问题所有这些规则都是通过将参数传递给另一个函数来触发的规则(尽管通常涉及到构造函数)。奇怪的是,这种烦人的规则(对许多人来说,根据SO问题的数量来判断)在这种情况下是如此宽容的。 –
是的,我同意这很烦人,但是我们应该“像你已经做的那样”不是依靠代码分析来修复我们的代码问题,而是只是用它们来仔细检查,看看我们是否忘记了这里和那里的某些东西...... –
是的......但那种打败了这种工具的目的。我使用它们的原因是,他们可以指出我做错了什么地方,为我省去了通过整个巨型代码库寻找这样的小事情的麻烦。 –