我有以下扩展名字符串的方法:代码分析规则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