CA1806 不要忽略方法错误地引发结果
本文关键字:结果 错误 方法 CA1806 | 更新日期: 2023-09-27 18:31:45
因此我的以下代码:
[Conditional("DEBUG")]
internal static void WriteGLResult(string methodName, object result,
params object[] args)
{
string message = String.Format(CultureInfo.InvariantCulture, "{0}({1}) = {2}",
methodName, String.Join(", ", args), result);
Write(LogType.Information, Category.GLResult, 2, message);
}
我清楚地将String.Format()
结果分配给变量message
.之后,我还将该实例传递给 Write 方法。然而,CA1806被提出:
不要忽略方法结果
'Log.WriteGLResult(string, object, params object[])' 调用 'string.Format(IFormatProvider, string, params object[])' 但不使用该方法返回的新字符串实例。将实例作为参数传递给另一个方法,将实例分配给变量,或者在不必要的情况下删除调用。
在调用的Write
方法中,我也使用了名为format
的字符串,因为它是这样用的:
[Conditional("DEBUG")]
private static void Write(LogType logType, Category category, int stackTraceFrameSkips,
string format, params object[] args)
{
// ...
string message = String.Format(CultureInfo.InvariantCulture, format, args);
// ...
}
我不知道如何解决此警告。我怀疑CA错误地提出了这个问题。
你可以帮我吗?
从注释扩展:
由于Write
被定义为
[Conditional("DEBUG")]
private static void Write(LogType logType, Category category, int stackTraceFrameSkips,
string format, params object[] args)
这意味着在未定义DEBUG
符号时,对Write
的调用将被完全删除。代码分析稍后运行,届时它可以(正确)确定从未使用message
。
对于在调试和发布模式下都不警告的内容,您可能希望将调用 String.Format
直接移动到方法参数中:
Write(LogType.Information, Category.GLResult, 2,
String.Format(CultureInfo.InvariantCulture, "{0}({1}) = {2}",
methodName, String.Join(", ", args), result));
这应确保仅在调用Write
时才调用String.Format
。