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错误地提出了这个问题。

你可以帮我吗?

CA1806 不要忽略方法错误地引发结果

从注释扩展:

由于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