CA1062:对共同构造函数调用ValidateArgumentsOfPublicMethods
-
21-08-2019 - |
题
我有两个构造函数看起来像这样一类:
public MyClass(SomeOtherClass source) : this(source, source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
当我运行的FxCop,它正确报告违反 CA1062:ValidateArgumentsOfPublicMethods 一>,因为如果source
在第一构造null
,它会抛出一个NullReferenceException
上source.Name
。
有没有什么办法来解决这个警告?
我能用于检查空和返回其自变量的扩展方法,但它会难看。此外,据我了解,它不会解决警告,因为FxCop的可能都不会意识到它做什么。
解决方案
像这样?
public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
其他提示
有合法次关闭FxCop的警告,这很可能是一个,但你可以通过一个三元表达式检查空,抛出异常(或替代默认值),或呼叫纠正问题到用于检查空并引发适当的异常。一个静态方法
由于这个问题被问前一段时间我只是想在C#中后期的功能,你现在还可以使用此要注意的:
public MyClass(SomeOtherClass source) : this(source, source?.Name) { }
我会说解决这个警告将关闭它的唯一途径。 FxCop的是一个伟大的工具,但有时你必须要记住,这仅仅是一个工具,可以提出建议总是无法拟合到你的代码。
在这个例子中,我会说忽略警告或禁用它,如果你不希望看到它。
不隶属于 StackOverflow