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

时间:2015-02-18 16:41:45

标签: c# static-analysis

假设我想验证稍后要使用的对象的构造函数的一些参数。另外,假设验证这些参数的标准是详细的。

例如,我想检查创建X509Certificate2所需的一些项目是否合法。我一直在try {}中调用构造函数并捕获异常,但是静态分析(正确)报告" CA1804删除未使用的locals方法声明一个局部变量但不使用该变量,除了可能作为接收者转让声明。"

考虑以下代码:

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。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我通常避免在构造函数中做很多工作(特别是可以抛出的东西)

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

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

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

就可以了。