如何在没有 ca1804 的情况下验证构造函数参数

How to validate constructor arguments without ca1804

假设我想为稍后使用的对象的构造函数验证一些参数。另外,假设验证这些论点的标准很详尽。

例如,我想检查创建 X509Certificate2 所需的某些项目是否合法。我一直在 try{} 中调用构造函数并捕获异常,但静态分析(正确)报告 "CA1804 remove unused locals A method declares a local variable but does not use the variable except possibly as the recipient of an assignment statement."

考虑这段代码:

string password = "bosco";
byte[] certyBytes = new byte[]{1,2,3};
try
{
  X509Certificate2 tpCert = new X509Certificate2(certBytes, password);
}
catch (CryptographicException)
{
  log.Debug("Bad cert.");
}

由于未使用 tpCert,静态分析在上面第 5 行报告 CA1804。

有更好的方法吗?

我通常避免在构造函数中做太多工作(尤其是可能抛出的东西)

所以我的建议是不要尝试抑制 FXCop 警告,而是使用例如一个只检查参数的静态方法。

如果您不能/不想更改 X509Certificate2 class 代码,那么我会像 Craig W 那样做。建议:只需放置一个

[SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals",
            Justification = "Testing parameters only")]

就可以了。