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 rompente
Abilitato per impostazione predefinita in .NET 10 A titolo di avvertimento
Linguaggi applicabili C# e Visual Basic

Causa

Il numero di parametri forniti nel template del messaggio di registrazione non corrisponde al numero di segnaposto nominati.

Descrizione regola

Questa regola contrassegna le chiamate al logger con un numero errato di argomenti del messaggio.

Come correggere le violazioni

Abbina il numero di segnaposto nel formato del template con il numero di argomenti passati.

Quando eliminare gli avvisi

Non sopprimere 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