我有以下擴展名字符串的方法:代碼分析規則CA1062行爲
public static bool IsNullOrEmpty(this string target)
{
return string.IsNullOrEmpty(target);
}
...在我用它作爲代碼如下:
public static string DoSomethingOnString(this string target)
{
if (target.IsNullOrEmpty())
return target;
target = target.Trim(); //This line causes CA1062 violation
return target;
}
現在,如果我運行代碼分析對此,我違反了規則CA1062。 但是,如果我的代碼更改爲:
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;
}
...那麼它是好的。
爲什麼它認爲我沒有檢查第一個例子中的空狀態?它是否只檢查string.IsNullOrEmpty或string.IsNullOrWhiteSpace?有沒有辦法讓CA識別我的擴展方法,或者我需要抑制這個規則?
UPDATE: 如果你有,你可以在反饋產品,投以同樣的問題,我在MS連接提交: Code Analysis rule CA1062 raises false alarm
*哪裏*是違規?在擴展方法?在*到*的擴展方法中調用?或之後呢?每當你提到一個問題中的錯誤/警告時,*請*顯示它出現在哪裏。 – 2013-03-03 18:18:44
查看IL代碼,代碼分析不會在您在IDE中看到的代碼上運行,所以這可能會有所幫助。 – Gorgsenegger 2013-03-03 20:12:04
你可以使用'ValidatedNotNullAttribute'讓FxCop知道。更多信息:http://esmithy.net/2011/03/15/suppressing-ca1062/ – 2014-12-10 08:02:40