VS代码分析CA1062即使在空检查后也会触发
Posted
技术标签:
【中文标题】VS代码分析CA1062即使在空检查后也会触发【英文标题】:VS codeanalysis CA1062 fires even after null check 【发布时间】:2014-11-21 12:34:53 【问题描述】:我有一个 Sitecore 项目,我在其中使用了 visualstudio 代码分析。我正在使用 Sitecore 方法“Assert.ArgumentNotNull”检查空参数,但是 visualstudio 代码分析引擎无法识别它并显示“CA1062 验证公共方法的参数”消息。
除了创建自定义规则,有没有更简单的方法告诉分析引擎“Assert.ArgumentNotNull”执行空检查并且消息无效。
我不想隐藏或禁用该消息。
【问题讨论】:
【参考方案1】:您不能那样使用 Sitecore 的 Assert
类,这就是原因:
Sitecore Assert
类以及 NotNullAttribute
和 CanBeNullAttribute
是 ReSharper 在执行自己的分析时可以理解的方式。
Assert.ArgumentNotNull(object, string)
方法的定义如下:
[AssertionMethod]
public static void ArgumentNotNull([CanBeNull] [AssertionCondition(AssertionConditionType.IS_NOT_NULL)] object argument, [CanBeNull] [InvokerParameterName] string argumentName)
所有这些属性都在 Sitecore 中定义,由于命名约定,R# 可以理解它们。
不幸的是,VS 代码分析有另一个命名约定。 ArgumentNotNull
对你来说应该是这样的:
public static void ArgumentNotNull([ValidatedNotNull] object argument, string argumentName)
由于不能修改Assert
类,所以不能用ValidatedNotNullAttribute
标记argument
参数。
【讨论】:
以上是关于VS代码分析CA1062即使在空检查后也会触发的主要内容,如果未能解决你的问题,请参考以下文章
即使存在 try/catch 块,应用程序也会在空对象引用上出现“布尔 android.content.Intent.migrateExtraStreamToClipData()”