Jest wiele pytań na temat SO lamentujących na tym, że Code Analysis reguła CA2000 jest stosowana zbyt rygorystycznie przez VS2010, ale wydaje mi się, że natknąłem się na przypadek, w którym należy go zastosować, ale nie jest.Dlaczego Bitmap powoduje regułę CA2000, ale obraz nie?
Rozważmy następujący kod:
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);
Teraz jeśli biegnę analizy kodu w Visual Studio 2010 na ten temat, to narzekają newImage nie są umieszczone (Easy Fix, umieścić go w innym wykorzystaniem bloku) , ale nie narzeka na srcImage (która również ma metodę Dispose(), której nigdy nie wywołuję). Czy ktoś wie, dlaczego analiza kodu nie narzeka tutaj?
Myślałem, że na początku, ale potem spojrzałem na inne pytania CA2000 na SO i prawie wszystkie z nich mają regułę uruchamianą przez takie przekazywanie argumentów innej funkcji (choć zwykle z zaangażowanymi konstruktorami). To dziwne, że reguła ta denerwująca (dla wielu ludzi, sądząc po liczbie pytań SO) byłaby tak wybaczająca w tej sytuacji. –
Yup, zgadzam się, że jest to denerwujące, jednak powinniśmy "polubić Cię już", nie polegając na analizie kodu, aby naprawić nasze problemy z kodem, zamiast tego po prostu użyć ich do podwójnego sprawdzenia i zobaczyć, czy zapomnimy o czymś tu i tam ... –
Tak ... ale ten rodzaj pokonuje cel takich narzędzi. Powodem, dla którego ich używam, jest to, że mogą wskazać lokalizacje, w których zrobiłem coś złego, aby zaoszczędzić mi kłopotów z przeglądaniem gigantycznych baz kodujących małe rzeczy takie jak ta. –