phương pháp khuyến nông Tôi đã sau cho chuỗi:Mã Phân tích hành vi quy tắc CA1062
public static bool IsNullOrEmpty(this string target)
{
return string.IsNullOrEmpty(target);
}
... và trong các mã tôi sử dụng nó như sau:
public static string DoSomethingOnString(this string target)
{
if (target.IsNullOrEmpty())
return target;
target = target.Trim(); //This line causes CA1062 violation
return target;
}
Bây giờ, nếu tôi chạy phân tích mã về điều này, tôi vi phạm quy tắc CA1062. Nhưng nếu tôi thay đổi mã thành:
public static string DoSomethingOnString(this string target)
{
if (string.IsNullOrEmpty(target)) //CHANGED LINE
return target;
target = target.Trim(); //This line DOES NOT cause CA1062 violation anymore
return target;
}
... thì vẫn ổn.
Tại sao nó cho rằng tôi không kiểm tra điều kiện rỗng trong ví dụ đầu tiên? Nó chỉ kiểm tra chuỗi .IsNullOrEmpty hoặc string.IsNullOrWhiteSpace? Có cách nào để làm cho CA nhận ra phương pháp mở rộng của tôi, hoặc tôi sẽ cần phải ngăn chặn quy tắc này?
UPDATE: Nếu bạn có cùng một vấn đề, bạn có thể biểu quyết về mục phản hồi tôi nộp MS Connect: Code Analysis rule CA1062 raises false alarm
* Ở đâu * là vi phạm? Trong phương pháp mở rộng? Trong cuộc gọi * đến * phương pháp mở rộng? Hoặc sau nó? Bất cứ khi nào bạn đề cập đến một lỗi/cảnh báo trong một câu hỏi, * xin vui lòng * cho thấy nơi nó xảy ra. –
Nhìn vào mã IL, phân tích mã không hoạt động trên mã bạn thấy trong IDE của bạn, vì vậy có lẽ điều này sẽ giúp ích. – Gorgsenegger
Bạn có thể sử dụng 'ValidatedNotNullAttribute' để cho FxCop biết. Thêm tại đây: http://esmithy.net/2011/03/15/suppressing-ca1062/ –