Có rất nhiều câu hỏi trên SO than phiền thực tế là quy tắc Phân tích mã CA2000 đang được áp dụng có thể quá khắt khe bởi VS2010, nhưng dường như tôi đã gặp phải trường hợp cần áp dụng, nhưng không phải.Tại sao Bitmap gây ra quy tắc CA2000, nhưng Hình ảnh thì không?
Xét đoạn mã sau:
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);
Bây giờ nếu tôi chạy Phân tích Mã trong Visual Studio 2010 về vấn đề này, nó sẽ phàn nàn về newImage không được xử lý (dễ dàng sửa chữa, đặt nó trong một sử dụng khối) , nhưng nó không phàn nàn về srcImage (cũng có một phương thức Dispose() mà tôi không bao giờ gọi). Có ai biết tại sao Code Analysis không phàn nàn ở đây?
Tôi nghĩ lúc đầu, nhưng sau đó tôi đã xem xét các câu hỏi CA2000 khác trên SO và khá nhiều tất cả chúng đều có quy tắc được kích hoạt bởi việc truyền tham số đó tới một hàm khác (mặc dù thường là với các hàm tạo). Thật kỳ lạ khi một quy tắc gây phiền nhiễu (đối với nhiều người, đánh giá bởi số lượng câu hỏi SO) sẽ rất tha thứ trong tình huống này. –
Yup, tôi đồng ý rằng điều đó thật khó chịu, tuy nhiên chúng tôi nên "like you already did" không dựa vào Code Analysis để khắc phục các vấn đề về mã của chúng tôi, thay vào đó chỉ cần sử dụng chúng để kiểm tra lại và xem chúng ta có quên thứ gì đó ở đây không ... –
Vâng ... nhưng đó là loại thất bại mục đích của các công cụ như vậy. Lý do tôi sử dụng chúng là vì vậy họ có thể chỉ ra các địa điểm mà tôi đã làm điều gì đó sai, để giúp tôi giải quyết rắc rối để đi qua toàn bộ quá trình săn mã cơ bản khổng lồ cho những việc nhỏ như thế này. –