Compartilhar via


CA2017: Incompatibilidade de contagem de parâmetros

Property Valor
ID da regra CA2017
Título Incompatibilidade de contagem de parâmetros
Categoria Confiabilidade
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 10 Como aviso

Causa

O número de parâmetros fornecido no modelo de mensagem de registro em log não corresponde ao número de espaços reservados nomeados.

Descrição da regra

Essa regra sinaliza chamadas de agente que têm um número incorreto de argumentos de mensagem.

Como corrigir violações

Corresponda o número de espaços reservados no formato de modelo com o número de argumentos passados.

Quando suprimir avisos

Não suprima um aviso nessa regra.

Example

O exemplo a seguir mostra métodos que violam CA2017 e métodos que atendem à regra.

public class LoggingExample
{
    private readonly ILogger<LoggingExample> _logger;

    public LoggingExample(ILogger<LoggingExample> logger)
    {
        _logger = logger;
    }

    public void ExampleMethod()
    {
        string name = "Alice";
        int age = 30;

        // Violates CA2017: Too few arguments for placeholders.
        _logger.LogInformation("User {Name} is {Age} years old and lives in {City}", name, age);

        // Violates CA2017: Too many arguments for placeholders.
        _logger.LogError("Error occurred: {Message}", "Something went wrong", "Extra argument");

        // Correct usage: Matching number of placeholders and arguments.
        _logger.LogInformation("User {Name} is {Age} years old", name, age);
    }
}
Imports Microsoft.Extensions.Logging

Public Class LoggingExample

    Private ReadOnly _logger As ILogger(Of LoggingExample)

    Public Sub New(logger As ILogger(Of LoggingExample))
        _logger = logger
    End Sub

    Public Sub ExampleMethod()
        Dim name As String = "Alice"
        Dim age As Integer = 30

        ' Violates CA2017: Too few arguments for placeholders.
        _logger.LogInformation("User {Name} is {Age} years old and lives in {City}", name, age)

        ' Violates CA2017: Too many arguments for placeholders.
        _logger.LogError("Error occurred: {Message}", "Something went wrong", "Extra argument")

        ' Correct usage: Matching number of placeholders and arguments.
        _logger.LogInformation("User {Name} is {Age} years old", name, age)
    End Sub

End Class

Confira também