Condividi tramite


CA2017: Mancata corrispondenza del conteggio dei parametri

Proprietà valore
ID regola CA2017
Title Mancata corrispondenza del conteggio dei parametri
Categoria Affidabilità
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 10 Come avviso

Causa

Il numero di parametri forniti nel modello di messaggio di registrazione non corrisponde al numero di segnaposto denominati.

Descrizione regola

Questa regola contrassegna le chiamate del logger con un numero non corretto di argomenti del messaggio.

Come correggere le violazioni

Trova la corrispondenza con il numero di segnaposto nel formato del modello con il numero di argomenti passati.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Example

Nell'esempio seguente vengono illustrati i metodi che violano CA2017 e i metodi che soddisfano la regola.

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

Vedi anche