如何在没有 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")]
就可以了。
假设我想为稍后使用的对象的构造函数验证一些参数。另外,假设验证这些论点的标准很详尽。
例如,我想检查创建 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")]
就可以了。