Partager via


CA1806 : N'ignorez pas les résultats des méthodes

Propriété Value
Identificateur de la règle CA1806
Titre N'ignorez pas les résultats des méthodes
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 10 À titre de suggestion

Cause

Il existe plusieurs raisons possibles à cet avertissement :

  • Un nouvel objet est créé, mais jamais utilisé
  • Une méthode qui crée et retourne une nouvelle chaîne est appelée, et la nouvelle chaîne n’est jamais utilisée
  • Une méthode COM ou P/Invoke retourne un HRESULT ou un code d'erreur qui n'est jamais utilisé.
  • Une méthode LINQ (Language-Integrated Query) retourne un résultat qui n’est jamais utilisé.
  • Une [Pure] méthode est appelée et la valeur de retour n’est jamais utilisée.

Description de la règle

La création d’objets inutiles et le nettoyage de la mémoire associé à l’objet inutilisé dégradent les performances.

Les chaînes sont immuables et les méthodes telles que String.ToUpper retournent une nouvelle instance d’une chaîne au lieu de modifier l’instance de la chaîne dans la méthode appelante.

Ignorer HRESULT ou un code d’erreur peut entraîner des conditions de faible ressource ou un comportement inattendu dans des conditions d’erreur.

Les méthodes et méthodes LINQ annotées PureAttribute avec sont connues pour ne pas avoir d’effets secondaires, et le résultat ne doit pas être ignoré.

Comment corriger les violations

Si une méthode crée une nouvelle instance d’un objet qui n’est jamais utilisée, passez l’instance en tant qu’argument à une autre méthode ou affectez l’instance à une variable. Si la création de l’objet n’est pas nécessaire, supprimez-le.

-ou-

Si la méthode A appelle la méthode B mais n’utilise pas la nouvelle instance de chaîne retournée par cette méthode B, passez l’instance en tant qu’argument à une autre méthode ou affectez l’instance à une variable. Ou supprimez l’appel s’il n’est pas nécessaire.

-ou-

Si la méthode A appelle la méthode B mais n’utilise pas le HRESULT ou le code d’erreur retourné par la méthode, utilisez le résultat dans une instruction conditionnelle, affectez le résultat à une variable ou passez-le en tant qu’argument à une autre méthode.

-ou-

Si la méthode A appelle une méthode LINQ ou pure B, mais n’utilise pas le résultat, utilisez le résultat dans une instruction conditionnelle, affectez le résultat à une variable ou transmettez-le en tant qu’argument à une autre méthode.

Quand supprimer les avertissements

Ne supprimez pas un avertissement de cette règle, sauf si l’acte de création de l’objet a un but quelconque.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Configurer le code à analyser

Utilisez l’option suivante pour configurer les parties de votre codebase sur lesquelles exécuter cette règle.

Méthodes supplémentaires à appliquer

Vous pouvez configurer cette règle afin de vérifier que les résultats d’API personnalisées supplémentaires sont utilisés. Spécifiez une ou plusieurs méthodes comme valeur de l’option additional_use_results_methods. Pour spécifier plusieurs noms de méthode, séparez-les avec |. Les formats autorisés pour le nom de la méthode sont les suivants :

  • Nom de la méthode uniquement (qui inclut toutes les méthodes portant ce nom, quel que soit leur type ou espace de noms)
  • Nom complet au format d’ID de documentation, avec un préfixe M: facultatif

Par exemple, pour spécifier que la règle CA1806 doit également vérifier que le résultat d’une méthode nommée MyMethod1 est utilisé, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet.

dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1

Vous pouvez également utiliser le nom complet pour lever l’ambiguïté ou vous assurer que seule une méthode spécifique portant ce nom est incluse.

dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)

Exemple 1

L’exemple suivant montre une classe qui ignore le résultat de l’appel à String.Trim.

public class Book
{
    public Book(string title)
    {
        // Violates this rule.
        title?.Trim();

        Title = title;
    }

    public string? Title { get; }
}
Public Class Book
    Public Sub New(ByVal title As String)

        If title IsNot Nothing Then
            ' Violates this rule                
            title.Trim()
        End If

        Me.Title = title

    End Sub

    Public ReadOnly Property Title() As String

End Class

L’exemple suivant corrige la violation en assignant le résultat de String.Trim de nouveau à la variable sur laquelle il a été appelé.

public class Book
{
    public Book(string title)
    {
        // Fixes the violation.
        Title = title?.Trim();
    }

    public string? Title { get; }
}
Public Class Book
    Public Sub New(ByVal title As String)

        If title IsNot Nothing Then
            title = title.Trim()
        End If

        Me.Title = title

    End Sub

    Public ReadOnly Property Title() As String

End Class

Exemple 2

L’exemple suivant montre une méthode qui n’utilise pas d’objet qu’elle crée.

Notes

Cette violation ne peut pas être reproduite en Visual Basic.

public class Book
{
    public Book() { }

    public static Book CreateBook()
    {
        // Violates this rule.
        new Book();
        return new Book();
    }
}

L’exemple suivant corrige la violation en supprimant la création inutile d’un objet.

public class Book
{
    public Book() { }

    public static Book CreateBook()
    {
        // Fixes the violation.
        return new Book();
    }
}