有很多問題值得我們感嘆,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問題的數量來判斷)在這種情況下是如此寬容的。 –
是的,我同意這很煩人,但是我們應該「像你已經做的那樣」不是依靠代碼分析來修復我們的代碼問題,而是隻是用它們來仔細檢查,看看我們是否忘記了這裏和那裏的某些東西...... –
是的......但那種打敗了這種工具的目的。我使用它們的原因是,他們可以指出我做錯了什麼地方,爲我省去了通過整個巨型代碼庫尋找這樣的小事情的麻煩。 –